Avatar billede Kim Neesgaard Seniormester
22. oktober 2007 - 12:46 Der er 7 kommentarer og
1 løsning

Flere handles til en combobox med kilde i tabel

Hvis man har en form (Windowsapplikation) med fx. flere comboboxe, så kan man bruge den samme change event kode til flere combobokse således:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged
        'Kode
End Sub

Hvis man nu har så mange combobokse på formen, så man styrer dem via en tabel, hvor alle navnene på comboboksene står, kan man så tildele handles:

Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged
osv.

dynamisk via tabellen i stedet for at skulle skive dem alle ind i selve koden? Hvis ja (hvad det jo sikkert er), hvordan?
Avatar billede neoman Novice
22. oktober 2007 - 18:57 #1
I ASP.NET, når man bruger VB, så kan man specificere handler for et event i selve taggen på aspx siden, og dermed kan flere tags dele same handler (hvor man så fjerner Handles... betingelsen), og alternativt kan man lave noget AddHandler i code-behind. I VB.NET er der også noget AddHandler - slå det op på MSDN.
Avatar billede Kim Neesgaard Seniormester
23. oktober 2007 - 13:50 #2
Jeg har fundet dette: http://msdn2.microsoft.com/en-us/library/7taxzxka(VS.80).aspx, men det virker ikke som om, at man kan tilføje handles baseret på en variabel fra en tabel? Men måske er det simpleste alligevel bare at skrive:

Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged osv.

i code behind?
Avatar billede neoman Novice
23. oktober 2007 - 13:55 #3
"tilføje handles baseret på en variabel fra en tabel" ? - prøv at uddybe hvad du ønsker ?
Jeg har ikke så meget styr på VB.NET, men i ASP.NEt er der intet til hinder for at man løber igennem alle kontroller i kode, og tilføjer en handler til dem som man lyster.
Hvis du har navnene på dine kontroller, hvad med at lave en loop og i denne tilføje din handler ?
Avatar billede neoman Novice
23. oktober 2007 - 14:02 #4
Noget i denne stil (folk som har forstand på det må melde sig:)


Dim myControl as ComboBox

minComboBox = 'i ASP.NET ville man f.eks. sige Page.FindControl("navnet på den")
AddHandler minComboBox.SelectedIndexChanged, AddressOf ComboBox1_SelectedIndexChanged
Avatar billede Kim Neesgaard Seniormester
23. oktober 2007 - 14:45 #5
Ja - jeg ville netop gøre det i en løkke. Jeg kan godt finde kontrollerne med:

Dim tmpControl As ComboBox = CType(Me.Controls.Find("s_" & TopicName, True)(0), ComboBox)

hvor 'TopicName' er et felt i en tabel, der så spoles igennem. Mit problem er at fortælle de forskellige comboboxe repræsenteret i TopicName, at de skal bruge samme kode ved SelectedIndexChanged.
Avatar billede neoman Novice
23. oktober 2007 - 14:47 #6
og fungerer AddHandler tmpControl.SelectedIndexChanged, AddressOf ComboBox1_SelectedIndexChanged ikke ?
Avatar billede Kim Neesgaard Seniormester
24. oktober 2007 - 08:31 #7
Jo - det gør den! Jeg havde blot misforstået dit svar - undskyld! Følgende test virker perfekt:

'Test af handle
    Sub handletest()
        Dim topicname As String = "DescAtmos"
        Dim tmpControl As ComboBox = CType(Me.Controls.Find("s_" & topicname, True)(0), ComboBox)
        AddHandler tmpControl.SelectedIndexChanged, AddressOf x
End Sub

Protected Sub x(ByVal sender As System.Object, ByVal e As System.EventArgs)
    lblInfo.Text = "Handle ok"
End Sub

Så skal der bare en løkke omkring i handletest, så TopicName kan spoles igennem fra tabellen.

Mange tak - lægger du et svar?
Avatar billede neoman Novice
24. oktober 2007 - 09:48 #8
svar :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester