[vb.net] string naar object

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Ik ben een beetje aan het knutselen met vb.net en nu stuite ik op een probleem waar ik niet uitkom.

Ik heb 30 pictureboxen:
plaatje1 tm plaatje30.

Ik heb ook een combobox met de waarden 1 tm 30.

Nu is het de bedoeling dat ik erachter kom wat voor achtergrond kleur een picturebox heeft die geselecteerd is uit de combobox.

Voorbeeld:

Gebruiker selecteerd value 21 uit de combobox.
Programma gaat na:
"plaatje" & NrUitCombobox .backcolor


Nu wil met name de samenvoeging "Plaatje" & nr niet lukken.
Ik krijg namelijk de error "Public member 'text' on type 'String' not found."

Dat wil volgens mij dus zeggen, dat hij nr dus als string ziet. Zo heb ik het immers ook "ge dimt"
Maar al maak ik ervan: dim picturbox of dim object
Ik blijf die error krijgen.

Waarschijnlijk dikke beginnersvraag, maar ik heb me suf gezocht en kan niets vinden.
search op: Convert string to object, String as object name enz leverden niets op.

Hopelijk kunnen jullie mij opweg helpen.
Of als het echt really easy is mij vertellen waar ik op moet googlen

Bedankt alvast

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 27-11 15:14

ZaZ

Tweakers abonnee

Je zoekt in de verkeerde richting. Wat jij vraagt is eigenlijk dat gecompileerde code ineens 'begrijpt' wat jij at runtime vraagt en dus een soort van sourcecode realtime compileert (kan het niet beter omschrijven :P)
Als het in je combo numerieke getallen zijn, kan je het beste denk ik gewoon een array gebruiken van je pictureboxen en zo de juiste aanroepen.
Als het perse strings moeten zijn dan biedt de .tag property wellicht uitkomst.(ik denk dat VB.NET die wel heeft)

Lekker op de bank


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Waarom hou je in de Tag property niet gewoon een referentie bij naar de picturebox die je per item voorstelt ?

[ Voor 5% gewijzigd door whoami op 29-01-2007 10:00 ]

https://fgheysels.github.io/


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Je wil de achtergrondkleur van het plaatje hebben die dezelfde waarde heeft als de geselecteerde waarde uit de combobox. Dus moet je het plaatjeobject zelf benaderen.

Zet de plaatjes in een array of collection en dan:

C#:
1
Console.WriteLine("Plaatje achtergrond" +  plaatje[(int)comboBox1.SelectedValue()].BackColor);

  • Paul
  • Registratie: September 2000
  • Laatst online: 14:21
Je hebt een paar opties.

Of je maakt een dikke switch en kijkt welke ding je moet hebben:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
Select Case lbWelkPlaatje.SelectedIndex
    Case 1
        Plaatje1.BackColor = Color.Red
    Case 2
        Plaatje2.BackColor = Color.Red
.
.
.
    Case n
        Plaatjen.BackColor = Color.Red
End Select

Maar dit is lelijk en groot etc. Ook slecht te onderhouden, een picturebox toevoegen zorgt dat je op meerdere plaatsen code aan moet passen.

Andere optie is alles PictureBoxen in een array zetten.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class Test
    Friend Plaatjes(30) As System.Windows.Forms.PictureBox

    Private Sub InitializeComponent()
        Dim i As Integer
        For i = 0 To 29
            Plaatjes(i) = New System.Windows.Forms.PictureBox
            AddHandler Plaatjes(i).Click, AddressOf PlaatjeClick
        Next
    end Sub

    Private Sub ComboBox1_Click Handles ComboBox1.Clicked
        Plaatjes(lbWelkPlaatje.SelectedIndex).BackColor = Color.Red
    End Sub
End Class

Even uit mijn hoofd :P Bij deze moet je nog wel uitkijken of je niet buiten je array komt enzo, maar het idee is duidelijk :)

Tot slot kun je het volgende ook nog proberen:
Visual Basic .NET:
1
2
3
4
5
6
Dim i As Integer
For i = 0 To Me.Controls.Count() - 1
    If (Me.Controls(i) Is PictureBox) And (Me.Controls(i).Name = "Plaatje" & Nummer) Then
        Me.Controls(i).BackColor = Color.Red
    End If
Next
Al staat me iets bij dat System.Windows.Forms.Control (iig in de Compact Framework, waar ik voor programmeer) geen Name-property heeft.

[ Voor 6% gewijzigd door Paul op 29-01-2007 11:27 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Oke bedankt.. Heb het opgelost!
Ben voor de array oplossing gegaan.

[ Voor 37% gewijzigd door NLAnaconda op 29-01-2007 12:06 ]

Pagina: 1