Buttons met index

  • Onderwerp starter Onderwerp starter buick
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

buick

Terugkerende gebruiker
Lid geworden
6 sep 2001
Berichten
2.901
Besturingssysteem
Windows 10/11
Ik ben sinds een paar weken overgestapt van VB6 naar VB.net (en begin langzaam alweer spijt te krijgen.. :) ) en probeer nu een aantal command buttons in een Array te plaatsen zodat ik ze met behulp van een index kan uitlezen.
Was dit in VB6 een fluitje van een cent (vb6 doet dit automatisch wanneer je een tweede of volgende button plaatst), in vb.net lijkt alleen iets simpels als dit niet meer simpel en zeker niet meer automatisch te gebeuren.

Heeft iemand een suggestie hoe ik dit in VB.net (2015) kan gaan doen zodat ik weer met Button(xx) kan gaan werken zonder voor iedere button aparte code te moeten schrijven? Want de verschillen tussen vb.net en vb6 zijn inmiddels zo groot dat het wel een compleet nieuwe programmeertaal lijkt.
 
Niemand een idee of is het niet mogelijk in in Visual Studio .Net?

Als ik bv in VB6 een rij buttons van een oplopend cijfer wilde voorzien dan kon ik een array maken button(0) tm button(9) en deze dan met een for-next lus van de juiste inhoud voorzien zoals dit voorbeeld (wat verder nergens anders toe dient dan verduidelijken :D )

Code:
   For i = 0 to 9
       Button(i).caption = str$(i)
   Next i

Dan heb ik 10 buttons met het cijfer 0 tot 9 daarop als text. Uiteraard kan dit ook met textfields etc. VB6 kan deze automatisch in een array plaatsen zodra je copy/paste doet.

Blijft de vraag of dit in VS2015 (hetzij vb hetzij c#) ook kan. Ik kom het nergens tegen en ook hebben de controls niet langer een INDEX property.
 
Je kunt door alle controls lopen op je window/form en als het een button is er iets mee doen of text wijzigen of in een array stoppen.
Ik zou blij zijn dat dit niet meer standaard is want het is niet te zien aan de code welke knop je aanpast en als er een knop wegvalt moet je van alles aanpassen.

Als je een voorbeeld nodig hebt kan ik je wel iets schrijven in C# tenzij iemand even dit in VB wil maken voor je.
 
Sorry voor de late reactie maar op een of andere manier heb ik nooit een mail gekregen dat er een reactie geplaatst was. :o

Wat ik wil doen is een on-screen toetsenbord maken met 10 knoppen, waarvan ik de text vul vanuit een bestaande 2-dimensionale text array.
Dus text array is KeyText(KeyNumber as Integer, KeySet as Integer)

Het is dan de bedoeling dat ik verschillende keysets heb en dan aan de hand van de keyset (die ik elders dan in de array inlees) , de tekst op de buttons kan vullen. Bijvoorbeeld set 1 = gewoon 0-9 maar set 2 is bv "A" tm "I" en set 3 is "00" tm "90"

In het oude systeem kan ik dan gewoon dit doen :

Code:
For i = 0 to 9
Button(i).Caption = KeyTex( i , Keyset)
Next i

Allemaal redelijk simpel dus. Bij een nieuwe keyset kan ik dit met dezelfde sub direct weer aanpassen. Als je een idee/voorbeeldje hebt hoe ik bovenstaande nu kan doen, dan kan ik daar waarschijnlijk weer een heel eind mee vooruit.
C# is prima. Ik wilde oorspronkelijk ook met C# verder maar was nyu weer uitgeweken naar vb.net om te kijken of dat daar wel kon, maar daar loop ik tegen hetzelfde aan.
 
Ik gebruik de 'TabIndex' property om de volgorde te bepalen, dit is ook de logische volgorde als je met het toetsenbord door de knoppen 'tabt'.
Je target de buttons in een bepaalde container voor gemak en dan geef je gewoon een string array mee.

Code:
private void SetContainerButtons(Control parentContainer, string[] keyContent)
{
    var buttons = parentContainer.Controls.OfType<Button>().OrderBy(btn => btn.TabIndex).ToList();
    for (int i = 0; i < buttons.Count; i++)
        buttons[i].Text = keyContent[i];
}


als bijvoorbeeld de buttons in een panel 'keyPanel' zitten
Code:
SetContainerButtons(keyPanel, new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I" });

als ze gewoon op het form zitten kun je 'this' gebruiken
Code:
SetContainerButtons(this, new[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});
 
Dank je voor het voorbeeld. Ik ga er even mee stoeien en kijken of ik wat verder kom :thumb:
 
Prima. Ik zal er wel even bij zeggen dat er altijd wel meer dan één manier is om dingen te doen dus als je er niet uitkomt hoor ik het wel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan