Chiamare direttamente i controlli aggiunti da codice

giovedì 09 aprile 2015 - 10.14
Tag Elenco Tags  VB.NET

willy_80 Profilo | Senior Member

Ciao a tutti sto lavorando ad un programma scritto in VBnet 2010.
Il progetto è composto da due form: "FrmMonitor" e "FrmControllo"

Da codice devo aggiungere vari "FrmControllo" nel "FrmMonitor" per fare questo ho costruito una sub:

Public Sub AddFrm(ByVal X As Integer, ByVal Y As Integer, ByVal F_Name As String) Dim FTL As New FrmControllo FTL.MdiParent = FrmMonitor FTL.Left = X FTL.Top = Y FTL.Name = F_Name FTL.Show() End Sub

Quando devo modificare qualcosa di questi form faccio una ricerca per ottenere il controllo da modificare e lo faccio usando questa function:

Public Function CercaFrm(ByVal F_Name As String) Dim CR As Form For c = 0 To FrmMonitor.Controls.Count - 1 If FrmMonitor.Controls(c).Name = F_Name Then CR = FrmMonitor.Controls(c) Next Return CR End Function

Avendo impostato un nome univoco ad ogni controllo e conoscendo il nome del controllo da modificare c'è un sistema per chiamare direttamente il controllo che mi serve senza dover per forza eseguire una ricerca fra tutti i controlli presenti nel FrmMonitor?
PS ovviamente i nomi univoci dei vari form non li conosco a priori, vengono man mano inseriti dall'utente tramite una textbox.

AntCiar Profilo | Expert


Ciao.
Utilizza un dizionario avente come chiave una stringa (il nome del controllo) e come valore il controllo stesso.
te lo dichiari a livello globale nella form e lo valorizzi in fase di aggiunta del controllo

Private ctrlList as Generic.Dictionary(of string, Control) = new Generic.Dictionary(of string, Control)()

Public Sub AddFrm(ByVal X As Integer, ByVal Y As Integer, ByVal
F_Name As String)

''con in dizionario controlli eventualmente se il controllo e' stato già creato

If not ctrlList .ContainsKey(F_Name) Then

Dim FTL As New FrmControllo
FTL.MdiParent = FrmMonitor
FTL.Left = X
FTL.Top = Y
FTL.Name = F_Name
FTL.Show()

ctrlList.Add(F_Name, FTL)

else
msgbox ("hai già inserito un controllo con il nome '" & F_Name & "'")
End If

End Sub


Poi quando devi richiamare il controllo a partire dal nome basta che fai questo:

If ctrlList.ContainsKey(nomeControllo) Then
CR = ctrlList(nomeControllo)
end if

PS: Ho scritto il codice direttamente nel forum quindi è probabile che ci sia qualche errore di battitura.
Cristian Barca

willy_80 Profilo | Senior Member

In tanto ti ringrazio dell'interessamento, ora vado a provare cio che mi hai suggerito, stavo appunto facendo un test per vedere di trovare una soluzione al problema, ho provato così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ovviamente i nomi sono diversi perchè ho fatto prove su un progetto di test, per funzionare funziona, che te ne pare?

AntCiar Profilo | Expert

si, anche questa è una soluzione valida.
Cristian Barca
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5