[Vb.Net] AddHandler dinamico

lunedì 03 maggio 2010 - 20.58

luka82 Profilo | Junior Member

Al click di un bottone creo dinamicamente dei panel che contengono delle combo e textbox.
Dim ListaControlli() As Control ... Cmb = New ComboBox Cmb.Name = "Cmb" & "_" & UBound(ListaControlli) + 1 Cmb.Location = New System.Drawing.Point(75, 33) CmbItems = New String() {"Valore1", "Valore2"} Cmb.Items.AddRange(CmbItems) Cmb.DropDownStyle = ComboBoxStyle.DropDownList Panel.Controls.Add(Cmb) AddHandler Cmb.SelectedIndexChanged, AddressOf Me.CtrlSelectedIndexChanged

Txt = New TextBox Txt.Name = "Txt" & "_" & UBound(ListaControlli) + 1 Txt.Location = New System.Drawing.Point(254, 33) Txt.Size = New Size(54, 20) Txt.Visible = False Panel.Controls.Add(Txt)

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Vorrei che se viene selezionato il "Valore 2" della Combo(in uno qualsiasi dei Panel) si imposti a True la proprietà Visible di una certa TextBox presente nello stesso Panel. Mi suggerite come fare?
Ciao

AntCiar Profilo | Expert

Ciao.

Io userei un altro approccio per risolvere il problema. Crea un usercontro (che simula il tuo panel) e dentro ci metti la Combo e la Text con il relativo evento come hai fatto tu (non serve fare tutto a runtime, basta anche da progettazione).

Poi via codice a runtime aggiungi gli N usercontrol.

Se proprio non vuoi abbandonare la tua strada, potresti fare in questo modo. Nel tuo evento di selectIndexChange della combobox hai una variabile ti tipo Object chiamata Sender. Questa rappresenta l'oggetto che ha scatenato l'evento (molto importante perchè tu usi lo stesso Handler per tutte le combo). A questo punto dopo aver fatto il cast all'oggetto Combobox, fai un ciclo sui controlli del padre (il panel control) e cerchi quello di tipo textBox e gli piazzi la visibilità

For i = 0 to ctype(sender, ComboBox).Parent.Controls.Count -1
if TypeOf ctype(sender, ComboBox).Parent.Controls(i) Is TextBox then

ctype(sender, ComboBox).Parent.Controls(i).visible = True
end if
next

Ciao
Cristian Barca

luka82 Profilo | Junior Member

Avevo già risolto con il mio metodo, per adesso lo lascio così però la prossima volta creo uno usercontrol come dici tu così evito di creare da codice il tutto.
Ciao e grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5