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 - Scelta tramite checkBox
Forum - C# / VB.NET - Scelta tramite checkBox - Pagina 3

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 9:43
Lunedì, 28/05/2018
forse mi sbaglio, ma non vengono numerati in ordine di creazione?

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:49
Lunedì, 28/05/2018
Testo quotato

Postato originariamente da Mikelius:

forse mi sbaglio, ma non vengono numerati in ordine di creazione?


In un form vuoto si, ma se sposti, copi o elimini poi aggiungi ecc non sai più in che ordine sono.
Controlla nel designer l'ordine dei controlli, di un tuo form, avrai delle sorprese.


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:13
Lunedì, 28/05/2018
Bisogna capire cosa si ha intenzione di fare.

Normalmente, un controllo, una volta depositato sul form, significa che deve rimanere li è non mosso.
Quindi il programmatore conosce il suo indice e va a manipolare quel controllo.

Nel caso ci siano uno o più controlli da gestire, o che magari vengono eliminati o creati a runtime,
in questo caso nasce l'esigenza di una lista basata su una struttura

Per il discorso di prima, quello di aggiungere ulteriori campi ad un controllo,
Basta creare una semplice classe ed ereditare la classe del controllo più aggiungerci
una variabile pubblica

Codice sorgente - presumibilmente VB.NET

  1. public class MioCheckBox : CheckBox
  2. {
  3.  
  4.    private int _id;
  5.    private string _altroTag;
  6.  
  7.  
  8.   public int ID { get { return _id; } set { _id = value; } }
  9.   public string AltroTago { get { return _altroTag; } set { _altroTag = value; } }
  10.  
  11.  
  12. }




Gestione di un controllo dinamico

Codice sorgente - presumibilmente C# / VB.NET

  1. //Controllo MioCheckBox1
  2.  
  3. MioCheckBox mio = new MioCheckBox();
  4. mio.Tag = "blabla";
  5. mio.ID = panel.Controls.Count;
  6. mio.AltroTag = "altro Tag";
  7. mio.Click = new EventHandler(MioCheckClick);
  8.  
  9. panel.controls.add(mio);
  10.  
  11.  
  12. //Come nell'esempio di carlo, quello di colorare i panel
  13. void MioCheckClick(object sender, e EventArgs)
  14. {
  15.  
  16.        panel.controls[((MioCheckBox)sender).ID].backcolor = (((MioCheckBox)sender).Checked) ? Color.Yellow : Color.Transparent;
  17.  
  18. }





https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:08
Lunedì, 28/05/2018
Testo quotato

Postato originariamente da Thejuster:
Normalmente, un controllo, una volta depositato sul form, significa che deve rimanere li è non mosso.
Quindi il programmatore conosce il suo indice e va a manipolare quel controllo.


Metto 10 TextBox, 2 Label, 2 CheckBox, poi decido che mi occorrono altre 3 TextBox, e l'ID delle nuove TextBox sarà sicuramente successivo a tutti i controlli già presenti sul contenitore perdendo la progressione indispensabile se si vuole gestire con l'indice e ciclo for.
Sapere che si può manipolare l'ID tramite il designer, è un'informazione da tenere bene in mente.
Il problema non sussiste se si usano i nomi dei controlli.

Testo quotato

Postato originariamente da Thejuster:
       panel.controls[((MioCheckBox)sender).ID].backcolor = (((MioCheckBox)sender).Checked) ? Color.Yellow : Color.Transparent;


Wow, non imaginavo nemmeno che un IF THEN ELSE si potesse scrivere così.
Hai postato preziose informazioni, il controllo dinamico lo provo subito, grazie.


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:35
Lunedì, 28/05/2018
Applicando le nuove conescenze al mio ConvertitoreMisure in C#, ho eliminato 70 righe di codice, le 24 text che avevo nel Panel2 e dovevo scrivere, leggere e colorare selettivamente ora le gestisco con un unico ciclo for.
Confermo che per avere gli indici progressivi e contigui ho dovuto riordinarle nel designer.cs, erano tutte rovesciate e c'era una label in mezzo.
Ecco l'aspetto dopo il riordino manuale che mi ha fatto ottenere l'indice da 0 a 23:
Codice sorgente - presumibilmente Plain Text

  1. -
  2.  
  3.             //
  4.             // Panel2
  5.             //
  6.             this.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
  7.             this.Panel2.CausesValidation = false;
  8.             this.Panel2.Controls.Add(this.textBox00);
  9.             this.Panel2.Controls.Add(this.textBox01);
  10.             this.Panel2.Controls.Add(this.textBox02);
  11.             this.Panel2.Controls.Add(this.textBox03);
  12.             this.Panel2.Controls.Add(this.textBox04);
  13.             this.Panel2.Controls.Add(this.textBox05);
  14.             this.Panel2.Controls.Add(this.textBox06);
  15.             this.Panel2.Controls.Add(this.textBox07);
  16.             this.Panel2.Controls.Add(this.textBox000);
  17.             this.Panel2.Controls.Add(this.textBox001);
  18.             this.Panel2.Controls.Add(this.textBox002);
  19.             this.Panel2.Controls.Add(this.textBox003);
  20.             this.Panel2.Controls.Add(this.textBox004);
  21.             this.Panel2.Controls.Add(this.textBox005);
  22.             this.Panel2.Controls.Add(this.textBox006);
  23.             this.Panel2.Controls.Add(this.textBox007);
  24.             this.Panel2.Controls.Add(this.textBox0000);
  25.             this.Panel2.Controls.Add(this.textBox0001);
  26.             this.Panel2.Controls.Add(this.textBox0002);
  27.             this.Panel2.Controls.Add(this.textBox0003);
  28.             this.Panel2.Controls.Add(this.textBox0004);
  29.             this.Panel2.Controls.Add(this.textBox0005);
  30.             this.Panel2.Controls.Add(this.textBox0006);
  31.             this.Panel2.Controls.Add(this.textBox0007);
  32.             this.Panel2.Controls.Add(this.butNascondi);
  33.             this.Panel2.Controls.Add(this.butTrasferisci);
  34.             this.Panel2.Controls.Add(this.textUnita);
  35.             this.Panel2.Controls.Add(this.Label1);
  36.             this.Panel2.Location = new System.Drawing.Point(630, 6);
  37.             this.Panel2.Name = "Panel2";
  38.             this.Panel2.Size = new System.Drawing.Size(349, 334);
  39.             this.Panel2.TabIndex = 172;


Ultima modifica effettuata da Carlo il 28/05/2018 alle 18:36


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 3:47
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Thejuster:
Per il discorso di prima, quello di aggiungere ulteriori campi ad un controllo,
Basta creare una semplice classe ed ereditare la classe del controllo più aggiungerci
una variabile pubblica
Codice sorgente - presumibilmente VB.NET

  1. class Class1
  2. {
  3.     public class MioCheckBox : CheckBox
  4.     {
  5.         private int _id;
  6.         private string _altroTag;
  7.  
  8.         public int ID { get { return _id; } set { _id = value; } }
  9.         public string AltroTag { get { return _altroTag; } set { _altroTag = value; } }
  10.     }
  11. }



Gestione di un controllo dinamico

Codice sorgente - presumibilmente C# / VB.NET

  1. //Controllo MioCheckBox1
  2.  
  3. MioCheckBox mio = new MioCheckBox();
  4. mio.Tag = "blabla";
  5. mio.ID = panel.Controls.Count;
  6. mio.AltroTag = "altro Tag";
  7. mio.Click += new EventHandler(MioCheckClick);
  8.  
  9. panel.controls.add(mio);
  10.  
  11. //Come nell'esempio di carlo, quello di colorare i panel
  12. void MioCheckClick(object sender,  EventArgs e)
  13. {
  14.        panel.Controls[((MioCheckBox)sender).ID].BackColor = (((MioCheckBox)sender).Checked) ? Color.Yellow : Color.Transparent;
  15. }



Ho provato il controllo dinamico, è veramente versatile.
Posto il sorgente, con le solite labels


Carlo ha allegato un file: testpulsanti3.zip (405457 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 29/05/2018 alle 5:46


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:16
Martedì, 29/05/2018
Mi fa piacere che ti piacciono gli operatori ternari ;)

Puoi anche concatenare più funzioni e fare una catena.
Come in questo esempio che feci tanto tempo fà.

In una sola condizione, tramite una catena di operatori ternari feci una calcolatrice.

http://www.pierotofy.it/pages/guide_tutorials/CSharp/Calco ...


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 10:34
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Carlo:

Testo quotato

Postato originariamente da Thejuster:
Per il discorso di prima, quello di aggiungere ulteriori campi ad un controllo,
Basta creare una semplice classe ed ereditare la classe del controllo più aggiungerci
una variabile pubblica
Codice sorgente - presumibilmente VB.NET

  1. class Class1
  2. {
  3.     public class MioCheckBox : CheckBox
  4.     {
  5.         private int _id;
  6.         private string _altroTag;
  7.  
  8.         public int ID { get { return _id; } set { _id = value; } }
  9.         public string AltroTag { get { return _altroTag; } set { _altroTag = value; } }
  10.     }
  11. }



Gestione di un controllo dinamico

Codice sorgente - presumibilmente C# / VB.NET

  1. //Controllo MioCheckBox1
  2.  
  3. MioCheckBox mio = new MioCheckBox();
  4. mio.Tag = "blabla";
  5. mio.ID = panel.Controls.Count;
  6. mio.AltroTag = "altro Tag";
  7. mio.Click += new EventHandler(MioCheckClick);
  8.  
  9. panel.controls.add(mio);
  10.  
  11. //Come nell'esempio di carlo, quello di colorare i panel
  12. void MioCheckClick(object sender,  EventArgs e)
  13. {
  14.        panel.Controls[((MioCheckBox)sender).ID].BackColor = (((MioCheckBox)sender).Checked) ? Color.Yellow : Color.Transparent;
  15. }



Ho provato il controllo dinamico, è veramente versatile.
Posto il sorgente, con le solite labels



:k:

Ottimo esempio Carlo

Mettilo in valutazione programmi come "Esempi"


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo