Groot aantal Buttons

Status
Niet open voor verdere reacties.

bitchkoemer

Gebruiker
Lid geworden
3 aug 2006
Berichten
39
Hallo,

Voor mijn nieuw "Kassa Register Programma" moet ik een groot aantal knoppen plaatsen in mijn "form" (50 knoppen voor de artikels, nog enkele voor totaal enz.)

Het gaat hem om die 50 knoppen voor de artikels, omdat het aanbod van artikels kan wijzigen heb ik de naam en kostprijs in een 50 lijns "array" gestopt.

Code:
01;Pils;1.30
02;Palm;1.40
-------
50;Glas Rode Wijn;2.20

De tekst op de knoppen zou tijdens het openen van het formulier dan uit de array opgehaald worden en op de respectievelijke knop gezet, knoppen zonder tekst zou ik kunnen disabelen.

Dit kan met

Code:
knop01.text = array(1,2)
knop02.text = array(2,2)
--------
knop50.text = array(50,2)

Dit leidt echter tot 50 lijnen (bijna dezelfde code)

Ik herriner mij uit VBA dat controlbuttons ook in een array konden gestopt worden zodat ze konden benaderd worden met "knop(1), knop(2) enz, hierdoor kon je ze makkelijk 1 voor 1 doorlopen in een For Next loop.

Code:
For AantalKnoppen = 1 to 50
    Knop(AantalKnoppen).text = array(AantalKnoppen,2)
Next AantalKnoppen

Blijkbaar kan dit niet meer in VB.net

Iemand enig idee hoe ik dit toch met slechts enkele regels code kan oplossen.

Alvast bedankt

Michel
 
Eerst en vooral: maak apparte groupbox aan voor enerzijds
producten en anderszijds totaal. (Bij mijn oplossing kan het zijn dat
VB uw groupbox uitleest van achter naar voor, je moet dan maar de
teller = i laten beginnen bij 50 en laten aftellen)

Private Sub zetText()

Dim oItem As Object
Dim i As Integer 'Dit is dus de teller beginnend bij 0

For Each oItem In gpbProducten.Controls
If oItem.GetType.ToString.Equals("System.Windows.Forms.Button") Then
Dim txtItem As TextBox
txtItem = oItem
txtItem.Text = array(i, 2)
i += 1
End If
Next

End Sub
 
Eerst en vooral: maak apparte groupbox aan voor enerzijds..................

Sorry voor de late reply, kwamen belangrijker zaken tussen.

Ik heb een Form1 gemaakt met daarop een GroupBox1, hierin staan 10 knoppen Button1 .. Button10.

Voor de gemakkelijkheid heb ik even geen array gebruikt als "tekst leverancier" maar probeer gewoor "teller i" op de knop te zetten.

Als ik volgende code laat runnen

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call zetText()

    End Sub

    Private Sub zetText()

        Dim oItem As Object
        Dim i As Integer 'Dit is dus de teller beginnend bij 0

        For Each oItem In groupbox1.Controls
            If oItem.GetType.ToString.Equals("System.Windows.Forms.Button") Then
                Dim txtItem As TextBox
                txtItem = oItem
                txtItem.Text = "Test " & i.ToString
                i += 1
            End If
        Next

    End Sub
End Class

dan krijg ik volgende error in de lijn txtItem = oItem:

"Unable to cast object of type 'System.Windows.Forms.Button' to type 'System.Windows.Forms.TextBox'."

Enig idee?

Alvast bedankt voor het meedenken.......
 
Laatst bewerkt:
Geen enkel probleem. Ik heb al onmiddelijk gezien waar het fout loopt.

In uw "for each" lus zoekt u achter buttons, maar dan probeert u die button te casten
naar textbox:

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call zetText()

    End Sub

    Private Sub zetText()

        Dim oItem As Object
        Dim i As Integer 'Dit is dus de teller beginnend bij 0

        For Each oItem In groupbox1.Controls
            If oItem.GetType.ToString.Equals("System.Windows.Forms.Button") Then
                [COLOR="Red"]Dim txtItem As TextBox[/COLOR]
                txtItem = oItem
                txtItem.Text = "Test " & i.ToString
                i += 1
            End If
        Next

    End Sub
End Class

Wat er eigenlijk moet staan:

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call zetText()

    End Sub

    Private Sub zetText()

        Dim oItem As Object
        Dim i As Integer 'Dit is dus de teller beginnend bij 0

        For Each oItem In groupbox1.Controls
            If oItem.GetType.ToString.Equals("System.Windows.Forms.Button") Then
                [COLOR="SeaGreen"]Dim btnItem As Button
                btnItem = oItem
                btnItem.Text = "Test " & i.ToString[/COLOR]
                i += 1
            End If
        Next

    End Sub
End Class

Indien je toch zou willen zoeken achter textboxes:

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call zetText()

    End Sub

    Private Sub zetText()

        Dim oItem As Object
        Dim i As Integer 'Dit is dus de teller beginnend bij 0

        For Each oItem In groupbox1.Controls
            If oItem.GetType.ToString.Equals("System.Windows.Forms.[COLOR="Red"]TextBox[/COLOR]") Then
                Dim txtItem As TextBox
                txtItem = oItem
                txtItem.Text = "Test " & i.ToString
                i += 1
            End If
        Next

    End Sub
End Class

P.S. U mag van geluk spreken dat ik mijn emails las. Normaal duurt het 2 weken voor ik dit doe ... :o
 
Geen enkel probleem. Ik heb al onmiddelijk gezien waar het fout loopt.

In uw "for each" lus zoekt u achter buttons, maar dan probeert u die button te casten
naar textbox:

Wat er eigenlijk moet staan:

Code:
     Dim btnItem As Button
     btnItem = oItem
     btnItem.Text = "Test " & i.ToString

Nu snap ik de code, ik had al heel wat dingen geprobeerd maar had eigenlijk niet echt door wat de code moest doen, nu is het zo helder als...................graanjenever........

Ben eigenlijk vrij nieuw in dat DotNet gedoe, 'k Heb vroeger wel wat geprogrammeerd in Qbasic en aanverwanten maar 'k ben eigenlijk beter thuis in PBasic (basic afgeleide waarmee de BasicStamp controller geprogrammeerd wordt, dit is dus al pure elektronica......)

P.S. U mag van geluk spreken dat ik mijn emails las. Normaal duurt het 2 weken voor ik dit doe ... :o

Het was nu niet echt dringend hoor maar het intrigreerde me wel, ik vind het verdwijnen van die control array eigenlijk een spijtige zaak.......

Nogmaals dank voor het meedenken......
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan