Oppure

Loading
08/04/17 9:04
piter123
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".

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 10/04/17 12:29
aaa
10/04/17 12:28
Thejuster
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
mire.forumfree.it/ - Mire Engine
C# UI Designer
10/04/17 13:55
piter123
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

aaa
11/04/17 7:28
Thejuster
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

pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/


Sopratutto ti consiglio di leggere questa parte

pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/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.


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.
mire.forumfree.it/ - Mire Engine
C# UI Designer
11/04/17 15:22
piter123
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

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.

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 12/04/17 6:25
aaa
11/04/17 15:41
piter123
ho risolto così anche se non sò se sia il modo più nobile

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 12/04/17 6:26
aaa
12/04/17 6:40
Thejuster
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


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.


mire.forumfree.it/ - Mire Engine
C# UI Designer
12/04/17 8:33
piter123
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
aaa