Indexering över flera ComboBox objekt.
Indexering över flera ComboBox objekt.
Så, då är man igång med Windows programmering igen efter ett eller ett par decennier. Senast var det VB6, inget .NET å sånt...
Börjar med en liten detalj, hantering av en Form med flera (i detta fall ca 20 rader med 10 per rad) ComboBox objekt.
Miljön är Win-11 med senaste "Microsoft Visual Studio Community 2022 (64-bit) - Current Version 17.7.5"
Har skapat ett projekt som "Windows Forms Application" med ".NET Framework" som "target".
Har valt VB som språk, mer hemma där än i C# och liknande.
Comboboxarna ligger i en "TableLayoutPanel" som är 20x11, en kolumn med rad-ID i kolumn 1, ComboBoxar i kolumn 2-11.
Ser ut så här (en dummy för experimenterande...)
Vill alltså kunna läsa ut "L2", "B12" o.s.v. från (t.ex.) rad 1.
Jag kan så klart sätta namn som innehåller rad/kolumn, men det blir lite klumpigt att hantera.
De heter i och för sig LH01_01, LH01_02 ... LH01_10 för rad ett. LH02_01 o.s.v. för rad 2.
Jag söker ett annat sätt att referera till boxarna än via namnet...
Har kollat på TabIndex, men det verkar vara mer för att "tabba" sig runt, och är inte tänkt för programkod.
Jag har även kollat på olika "Containers" men ser inte riktigt hur det är tänkt.
Jag vill alltså kunna göra något i stil med:
For Each cbox in <Comboboxes on line n>
...<Gör något med ConboBox nr 1 - 10 på rad n>
Next
Alla exempel jag hittar gör ungefär så, men loopar då genom samtliga ComboBox objekt på den aktiva Formen.
Jag vill bara ha de 10 st på en viss rad av de ca 20 raderna.
Tips?
Börjar med en liten detalj, hantering av en Form med flera (i detta fall ca 20 rader med 10 per rad) ComboBox objekt.
Miljön är Win-11 med senaste "Microsoft Visual Studio Community 2022 (64-bit) - Current Version 17.7.5"
Har skapat ett projekt som "Windows Forms Application" med ".NET Framework" som "target".
Har valt VB som språk, mer hemma där än i C# och liknande.
Comboboxarna ligger i en "TableLayoutPanel" som är 20x11, en kolumn med rad-ID i kolumn 1, ComboBoxar i kolumn 2-11.
Ser ut så här (en dummy för experimenterande...)
Vill alltså kunna läsa ut "L2", "B12" o.s.v. från (t.ex.) rad 1.
Jag kan så klart sätta namn som innehåller rad/kolumn, men det blir lite klumpigt att hantera.
De heter i och för sig LH01_01, LH01_02 ... LH01_10 för rad ett. LH02_01 o.s.v. för rad 2.
Jag söker ett annat sätt att referera till boxarna än via namnet...
Har kollat på TabIndex, men det verkar vara mer för att "tabba" sig runt, och är inte tänkt för programkod.
Jag har även kollat på olika "Containers" men ser inte riktigt hur det är tänkt.
Jag vill alltså kunna göra något i stil med:
For Each cbox in <Comboboxes on line n>
...<Gör något med ConboBox nr 1 - 10 på rad n>
Next
Alla exempel jag hittar gör ungefär så, men loopar då genom samtliga ComboBox objekt på den aktiva Formen.
Jag vill bara ha de 10 st på en viss rad av de ca 20 raderna.
Tips?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Indexering över flera ComboBox objekt.
Kommit lite vidare...
Detta "fungerar". Två Comboboxar i en panel "Panel1". Panel1 ligger i sin tur i en cell i en tabell.
Vid click på Button3 så blir Label1 "B2L1", d.v.s. att boxarna läsas av i fel ordning, så att säga.
Jag vill ha "L1B2" i just detta exempel. Alltså att "For Each" returnerar boxarna från vänster till höger. Ja, det är där jag stapplar fram just nu...
Jag kommer nog på det, man alla tips och hejarop är så klart välkomna.
Detta "fungerar". Två Comboboxar i en panel "Panel1". Panel1 ligger i sin tur i en cell i en tabell.
Kod: Markera allt
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
tmp = ""
For Each cBox As System.Windows.Forms.ComboBox In Panel1.Controls
tmp = tmp + cBox.Text
Next
Label1.Text = tmp
End Sub
Jag vill ha "L1B2" i just detta exempel. Alltså att "For Each" returnerar boxarna från vänster till höger. Ja, det är där jag stapplar fram just nu...
Jag kommer nog på det, man alla tips och hejarop är så klart välkomna.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Indexering över flera ComboBox objekt.
Kolla GetControlFromPosition(Int32, Int32) för TableLayoutPanel. Borde ge det som ligger i utpekad cell som resultat, dvs ComboBox-objektet. Sen läser du ut värdet ur det mha Value.
Re: Indexering över flera ComboBox objekt.
OK, det kan vara något.
Det här hämtar värdet i två celler i rätt ordning:
Ska så klart justeras till en tabell med (minst) 10 olika värden och med en parameter för att välja rad o.s.v...
Det här hämtar värdet i två celler i rätt ordning:
Kod: Markera allt
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
tmp = ""
For i = 1 To 2
Dim c As System.Windows.Forms.Control
c = TableLayoutPanel1.GetControlFromPosition(i, 0)
tmp = tmp + c.Text + ","
Next
Label1.Text = tmp
End Sub
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
-
- EF Sponsor
- Inlägg: 924
- Blev medlem: 26 maj 2014, 12:54:35
- Ort: Karlskoga
Re: Indexering över flera ComboBox objekt.
Har inte programmerat i VB på den här sidan milennieskiftet, men har för mig att det fanns något slags "arrayindex" man kunde sätta på kontroller.
Annars finns det säkert en metod på dialogen som ger dig en lista över alla kontroller. Då kan du kanske iterera den listan och hitta rätt baserat på olika properties på comboboxen
Annars finns det säkert en metod på dialogen som ger dig en lista över alla kontroller. Då kan du kanske iterera den listan och hitta rätt baserat på olika properties på comboboxen
Re: Indexering över flera ComboBox objekt.
Finns något som kallas TabIndex. Men det är mer för att styra ordningen då man trycker <Tab>. Men att loopar över cellerna verkar också fungera ok.
Aja, just den här detaljen verkar nu vara löst.
Aja, just den här detaljen verkar nu vara löst.
Re: Indexering över flera ComboBox objekt.
Datagrodview tycker jag är rätt kraftfullt och jag har för mig att kolumner kan sättas till combobox-typ.
Datan kan kopplas till databas, men det behöver man inte, datan kan även ligga direkt i datagrodviewn
Datan kan kopplas till databas, men det behöver man inte, datan kan även ligga direkt i datagrodviewn
Re: Indexering över flera ComboBox objekt.
Datagridview?
Fint, jag ska kolla lite på det också.
Ingen databas här, inställningarna ska skickas "ner" till en PIC processor. Och läsas "upp" då man ansluter (USB) till processorn.
Fint, jag ska kolla lite på det också.
Ingen databas här, inställningarna ska skickas "ner" till en PIC processor. Och läsas "upp" då man ansluter (USB) till processorn.