Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - oggetto a runtime
Forum - C# / VB.NET - oggetto a runtime

Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 11:04
Sabato, 08/04/2017
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

  1. dim Incremento as integer
  2.  
  3. Public Sub Avvio()
  4.  'Crea DropDownBtn in Ts per eliminare TsBtn
  5.             Dim BtnDrpDwn As New ToolStripDropDownButton
  6.             BtnDrpDwn.Text = "-"
  7.             BtnDrpDwn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
  8.             BtnDrpDwn.Width = 50
  9.             BtnDrpDwn.Name = "TsCan"
  10.             AddHandler BtnDrpDwn.Click, AddressOf TsBtnCanc_Click          
  11.             Me.TsMdi.Items.Add(BtnDrpDwn)                                
  12.             'BtnDrpDwn.Enabled = False
  13.  
  14.  'Crea Btn in Ts per aggiungere TsBtn
  15.             Dim Btn As New ToolStripButton
  16.             Btn.Text = "+"
  17.             Btn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
  18.             Btn.Width = 50
  19.             Btn.Name = "TsAdd"
  20.             AddHandler Btn.Click, AddressOf TsBtnAdd_Click        
  21.             Me.TsMdi.Items.Add(Btn)                                
  22.  End Sub
  23.  
  24.  
  25. Private Sub TsBtnAdd_Click(sender As Object, e As System.EventArgs)
  26.        
  27.         Dim Btn As New ToolStripButton
  28.         Btn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
  29.         Btn.Width = 50
  30.         Incremento=Incremento+1
  31.         Btn.Name = "TsBtn" & Incremento
  32.         AddHandler Btn.Click, AddressOf TsBtn_Click            
  33.         Me.TsMdi.Items.Add(Btn)                                  
  34.  
  35.  
  36.      'quì vorrei aggiornare la lista dei Btn "TsBtn" Creati   ........    
  37.  
  38.  
  39.     End Sub



Grazie

Edit: Usa i tag code la prossima volta

Ultima modifica effettuata da Thejuster il 10/04/2017 alle 14:29
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2239
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:28
Lunedì, 10/04/2017
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


PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 15:55
Lunedì, 10/04/2017
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


PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2239
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:28
Martedì, 11/04/2017
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

  1. For i As Integer = 0 To toolStripDropDownButton1.DropDownItems.Count - 1
  2.         toolStripDropDownButton1.DropDownItems(i).Text = "Prova"
  3. 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.


PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 17:22
Martedì, 11/04/2017
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

  1. Dim BtnDrpDwn As New ToolStripDropDownButton
  2.             BtnDrpDwn.Text = "-"
  3.             BtnDrpDwn.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
  4.             BtnDrpDwn.Width = 50
  5.             BtnDrpDwn.Name = "TsCan"
  6.             AddHandler BtnDrpDwn.Click, AddressOf TsBtnCanc_Click          
  7.             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

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  
  3.      Dim c As ToolStripDropDownButton
  4.         For Each c In me.TsMdi.Controls
  5.            if c.name="tscan" then
  6.             c.DropDownItems.Add("prova1")
  7.            end if
  8.         Next
  9.  
  10.     End Sub


Ovviamente non funziona




Ultima modifica effettuata da Thejuster il 12/04/2017 alle 8:25
PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 17:41
Martedì, 11/04/2017
ho risolto così anche se non sò se sia il modo più nobile

Codice sorgente - presumibilmente VB.NET

  1. Dim c As ToolStripDropDownButton
  2.         For Each c In Me.TsMdi.Items
  3.             If c.Name = "TsCan" Then
  4.                 c.DropDownItems.Add("TsBtn" & PosFormBase)
  5.                 Exit For
  6.             End If
  7.         Next


Ultima modifica effettuata da Thejuster il 12/04/2017 alle 8:26
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2239
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:40
Mercoledì, 12/04/2017
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

  1. For i As Integer = 0 To Controls.Count - 1
  2.         If Controls(i).[GetType]() = GetType(ToolStripDropDownButton) Then
  3.                 DirectCast(Controls(i), ToolStripDropDownButton).DropDownItems.Add("TsBtn" + PosFormBase)
  4.         End If
  5. 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.




PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 10:33
Mercoledì, 12/04/2017
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

PM Quote