
piter123 (Normal User)
Pro
    
Messaggi: 145
Iscritto: 21/05/2008
|
buongiono,
creo un ToolStripDropDownButton con name "TSCanc" e un ToolStripButton con name "TsAdd" a runtime.
il "TsAdd" ogni volta che viene cliccato crea un nuovo ToolStripButton che poi svolgerà altre cose.
Avrei però bisogno che ogni volta che premo il "TsAdd" aggiorni anche la lista del ToolStripDropDownButton "TSCanc".
Codice sorgente - presumibilmente VB.NET |
dim Incremento as integer Public Sub Avvio() 'Crea DropDownBtn in Ts per eliminare TsBtn Dim BtnDrpDwn As New ToolStripDropDownButton BtnDrpDwn.Text = "-" BtnDrpDwn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText BtnDrpDwn.Width = 50 BtnDrpDwn.Name = "TsCan" AddHandler BtnDrpDwn.Click, AddressOf TsBtnCanc_Click Me.TsMdi.Items.Add(BtnDrpDwn) 'BtnDrpDwn.Enabled = False 'Crea Btn in Ts per aggiungere TsBtn Dim Btn As New ToolStripButton Btn.Text = "+" Btn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText Btn.Width = 50 Btn.Name = "TsAdd" AddHandler Btn.Click, AddressOf TsBtnAdd_Click Me.TsMdi.Items.Add(Btn) End Sub Private Sub TsBtnAdd_Click(sender As Object, e As System.EventArgs) Dim Btn As New ToolStripButton Btn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText Btn.Width = 50 Incremento=Incremento+1 Btn.Name = "TsBtn" & Incremento AddHandler Btn.Click, AddressOf TsBtn_Click Me.TsMdi.Items.Add(Btn) 'quì vorrei aggiornare la lista dei Btn "TsBtn" Creati ........ End Sub
|
Grazie
Edit: Usa i tag code la prossima volta
Ultima modifica effettuata da Thejuster il 10/04/2017 alle 14:29 |
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2239
Iscritto: 04/05/2008
|
Certo...
Ma il problema dove sta?
dove che hai problemi? errori?
Mostra quello che hai fatto.
Non è difficile, All'evento OnTextChanged del dropdown prendi l'index dell'elemento
e modifichi i valori sia nella prima lista che nella seconda
|
|

piter123 (Normal User)
Pro
    
Messaggi: 145
Iscritto: 21/05/2008
|
il problema stà nel fatto che essendo uno smanettone e non un programmatore non sò come agganciare le proprietà (item,name, o quello che serve) ad un oggetto creato a runtime.
Errori ovviamente non ce ne sono perchè a riguardo non è stato scritto una virgola di codice.
si.... le soluzioni penso siano 2.
1) ho inserisco DropDownItems.Add nella routine nella quale da runtime genero dei nuovi Tsbtn che svolgeranno altre funzioni.
o
2) carico la nuova lista dei tsbtn quando intercetto l'evento del click ToolStripDropDownButton
il problema, penso, ma per la ragione elencata prima (vista la mia ignoranza) è quella di come identifico un oggetto creato a runtime, o meglio ancora una matrice di oggetti creati a runtime.
Grazie
|
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2239
Iscritto: 04/05/2008
|
Beh il supporto di questo forum principalmente funziona così.
Ci mostri il tuo codice o parte dove ti non riesci a proseguire, e noi ti aiutiamo.
Smanettone è una cosa, Il programmatore è un'altra.
Non ti offendere,
Lo smanettone e quel tipo di persona che vuole mostrare di saper fare tante cose,
ma non ne fà nessuna buona.
Il programmatore, e la persona che ti permette anche ora di poter usare il computer
lavorando su chrome, o appunto su questo sito web.
Se vuoi imparare
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...
Sopratutto ti consiglio di leggere questa parte
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...Gli_Eventi/
quella che serve al tuo progetto.
Successivamente, se non ci riesci, ci mostri il punto su cui sei fermo e che problemi hai.
Una volta agganciato l'evento,
ti basta risalire all'index dell'elemento per modificare i valori sia nella prima DropDown che nella seconda
magari inizia dalla soluzione più facile adatta al tuo caso.
questo è un esempio.
Codice sorgente - presumibilmente VB.NET |
For i As Integer = 0 To toolStripDropDownButton1.DropDownItems.Count - 1 toolStripDropDownButton1.DropDownItems(i).Text = "Prova" Next
|
Gli index vanno nella parentesi,
Più di questo non posso aiutarti perché come ti ho appena detto,
Senza sapere cosa fai, come si svolge il tuo programma non posso aiutarti.
|
|

piter123 (Normal User)
Pro
    
Messaggi: 145
Iscritto: 21/05/2008
|
pensavo che la mia richiesta di aiuto fosse abbastanza semplice e banale, come la risposta alla quale avrebbe avuto seguito,
forse non essendo molto pratico non ho posto bene la domanda.
Se creo un oggetto a runtime ToolStripDropDownButton come da codice seguente
Codice sorgente - presumibilmente VB.NET |
Dim BtnDrpDwn As New ToolStripDropDownButton BtnDrpDwn.Text = "-" BtnDrpDwn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText BtnDrpDwn.Width = 50 BtnDrpDwn.Name = "TsCan" AddHandler BtnDrpDwn.Click, AddressOf TsBtnCanc_Click Me.TsMdi.Items.Add(BtnDrpDwn)
|
e poi ho bisogno di popolarlo.
io vorrei solo sapere come faccio ad intercettarlo da codice per attribuirgli le proprietà tra cui anche popolarlo.
Codice sorgente - presumibilmente VB.NET |
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim c As ToolStripDropDownButton For Each c In me.TsMdi.Controls if c.name="tscan" then c.DropDownItems.Add("prova1") end if Next End Sub
|
Ovviamente non funziona
Ultima modifica effettuata da Thejuster il 12/04/2017 alle 8:25 |
|

piter123 (Normal User)
Pro
    
Messaggi: 145
Iscritto: 21/05/2008
|
ho risolto così anche se non sò se sia il modo più nobile
Codice sorgente - presumibilmente VB.NET |
Dim c As ToolStripDropDownButton For Each c In Me.TsMdi.Items If c.Name = "TsCan" Then c.DropDownItems.Add("TsBtn" & PosFormBase) Exit For End If Next
|
Ultima modifica effettuata da Thejuster il 12/04/2017 alle 8:26 |
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2239
Iscritto: 04/05/2008
|
Certo può essere una soluzione funzionale.
Non c'è nulla di anomalo.
Quando si creano oggetti a runtime di solito gli assegniamo dei nomi per ricordarci
cosa fanno o a cosa servono.
Di modi ce ne sono diversi ma ogni metodo si adatta a determinate situazioni.
Il tuo è un metodo classico che utilizzano in molti.
Quindi puoi andare tranquillo che funzionerà senza problemi.
Altrimenti per un qualcosa di più professionale
Codice sorgente - presumibilmente VB.NET |
For i As Integer = 0 To Controls.Count - 1 If Controls(i).[GetType]() = GetType(ToolStripDropDownButton) Then DirectCast(Controls(i), ToolStripDropDownButton).DropDownItems.Add("TsBtn" + PosFormBase) End If Next
|
Almeno sei sicuro che non ti sbagli, e gli puoi assegnare qualsiasi nome.
La condizione verifica che il controllo cercato ovvero TsCan sia un ToolStripDrowDownButton.
Se il controllo è di quel tipo, forza il compilatore ad identificare quell'elemento come ToolStripDrowDownButton.
E ne permette di aggiungere eventuali Item.
L'unica differenza tra il mio esempio ed il tuo è che:
Nel tuo caso, Sei costretto a verificare che il controllo abbia un determinato nome.
Nel mio caso, Il programma verifica unicamente il tipo di controllo e non il nome.
|
|

piter123 (Normal User)
Pro
    
Messaggi: 145
Iscritto: 21/05/2008
|
fantastico, mille grazie.
Approfitto per chiederti un'altra cosa :
con
ToolStripDropDownButton.DropDownItems.Count
mi identifica l'item selezionato, ma se volessi avere il valore in testo dell'item selezionato ?
Grazie
|
|