22. oktober 2007 - 12:46Der 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:
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.
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:
"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 ?
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
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.
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.
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.