Indexering över flera ComboBox objekt.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Indexering över flera ComboBox objekt.

Inlägg av sodjan »

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...)
Skärmbild 2023-10-23 133203.png
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.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Indexering över flera ComboBox objekt.

Inlägg av sodjan »

Kommit lite vidare...

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
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.
Skärmbild 2023-10-23 160303.png
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.
ie
EF Sponsor
Inlägg: 1276
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: Indexering över flera ComboBox objekt.

Inlägg av ie »

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.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Indexering över flera ComboBox objekt.

Inlägg av sodjan »

OK, det kan vara något.

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
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...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
kodar-holger
EF Sponsor
Inlägg: 921
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Indexering över flera ComboBox objekt.

Inlägg av kodar-holger »

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
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Indexering över flera ComboBox objekt.

Inlägg av sodjan »

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. :)
bobobo
Inlägg: 677
Blev medlem: 10 november 2007, 22:18:30
Ort: Kungsbacka

Re: Indexering över flera ComboBox objekt.

Inlägg av bobobo »

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
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Indexering över flera ComboBox objekt.

Inlägg av sodjan »

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.
Skriv svar