Unschön gelöst, hat jemand eine bessere Idee

ulf123

Erfahrenes Mitglied
Hey leute,



Code:
 While reader.Read()
                If cnt = 1 Then
                    Bestellung.Button1.Text = reader.GetString(2)
                    Bestellung.Button1.Visible = True
                End If
                If cnt = 2 Then
                    Bestellung.Button2.Text = reader.GetString(2)
                    Bestellung.Button2.Visible = True
                End If
                If cnt = 3 Then
                    Bestellung.Button3.Text = reader.GetString(2)
                    Bestellung.Button3.Visible = True
                End If
                If cnt = 4 Then
                    Bestellung.Button4.Text = reader.GetString(2)
                    Bestellung.Button4.Visible = True
                End If
                If cnt = 5 Then
                    Bestellung.Button5.Text = reader.GetString(2)
                    Bestellung.Button5.Visible = True
                End If
                cnt += 1
            End While


gibt es eigentlich ne möglichkeit den Namen einen objekts einfach hoch zuzählen?


bitte um Antwort, bei 100 Buttons ist das echt mist.


Danke

Ulf
 
Hallo,

du solltest die Buttons in ein Array packen. Dann kannst du über einen Index darauf zugreifen.

Gruß
MCoder
 
Man könnte auch eine Switch Anweisung machen. Mit dem Array finde ich ist aber eine klasse Lösung hat was. Ich würd es wohl wie gesagt mit switch machen. Oder Du machst einen Button und eine HashMap und füllst diesen dann mit den Strings (als Schlüssel)so könntest Du später evtl noch was machen mit Werten zu den Schlüsseln.Ist ein weniig schneller als ein array.
Mfg
oli
 
Zuletzt bearbeitet:
Wie wärs kurz mit
Visual Basic:
Me.Controls("Button" & cnt).Text = reader.GetString(2)
Me.Controls("Button" & cnt).Visible = True
Hier wären natürlich noch Anpassungen notwendig, wenn deine Buttons z.B. in einem Container oä liegen.


Der Doc!
 
Mit ListBox oder DataGridView anzeigen, je nachdem was du vor hast.
Die 100 Buttons im allgemeinen finde ich eher suboptimal.
 
Ich komm mir hier gerade n bissel Blod vor aber für mich ist das auch gerade sone massen abarbeitung mit den buttons.

Hab Ihr hier für auch ne bessere Lösung

Code:
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MsgBox(Label2.Text)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        MsgBox(Label3.Text)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        MsgBox(Label4.Text)
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        MsgBox(Label5.Text)
    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        MsgBox(Label10.Text)
    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        MsgBox(Label9.Text)
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        MsgBox(Label8.Text)
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        MsgBox(Label7.Text)
    End Sub


Danke für alles
 
Das besondere unter VB.NET (im Vergleich zu VB6/VBA) ist das Handle bei solchen Prozeduren. Hier kannst du nicht nur ein Handle sondern gleich ein paar abfangen, wie die Prozedur heißt, ist für das Handle dabei nebensächlich:
Code:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button3.Click
Da ja auch immer der sender mitgeliefert wird, kannst du hier über die .name-Eigenschaft den Namen abfragen und dementsprechend entweder über Select/Case eine Verzweigung machen oder, wie ich oben schon mal geschrieben habe, über die Controls-Auflistung das entsprechende Label anzeigen lassen. Das ganze würde dann so aussehen:
Code:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button7.Click, Button8.Click, Button9.Click, Button10.Click
	Dim sLabel As String = sender.name.ToString.Replace("Button", "Label")
	MsgBox(Me.Controls(sLabel).Text)
End Sub


Der Doc!
 
Zurück