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 2

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


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 22:54
Venerdì, 25/05/2018
Testo quotato

Postato originariamente da Thejuster:

Crearti un componente personale non va bene?




Non ho ancora studiato bene la procedura

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 22:48
Sabato, 26/05/2018
Testo quotato

Postato originariamente da Mikelius:

Salve, ho una domanda:

ho 4 checkBox (ma potrebbero diventare anche 20)
che se vidimate (chekkate non mi piace) ognuna svolge un compito. Non sono mutuamente eclusive.
Ho risolto in questo modo (nel TAG ho inserito numeri progressivi per ogni checkBox):

Codice sorgente - presumibilmente C#

  1. foreach (Control item in groupBoxOutput.Controls)
  2.             {
  3.                 if(item is CheckBox fileCheck)
  4.                 {
  5.                     if (fileCheck.Enabled)
  6.                     {
  7.                         switch (fileCheck.Tag)
  8.                         {
  9.                             case 1:
  10.                                 a();
  11.                                 continue;
  12.                             case 2:
  13.                                 b();
  14.                                 continue;
  15.                           ////////
  16.                         }
  17.                     }
  18.                 }
  19.             }



e buono? ci sono metodi più eleganti?



Mi sono scontrato anche io con questo problema, e ho risolto come te mettendo un numero nel Tag per identificare il controllo processato.
Ci dovrebbe essere una procedura che ancora non mi è chiara, usando il nome del controllo.

Altra soluzione, in VS da codice si può creare una matrice di controlli, con l'indice accedi solo al controllo che vuoi senza usare foreach.
E' il metodo che uso più di frequente, per me il più elegante, e comprensibile, ma se Microsoft ha tolto la possibilità di inserire una matrice di controlli direttamente da progettazione, avrà reputato che c'è una soluzione migliore!

La risposta di Thejuster è sicuramente la più corretta, ma con le mie conoscenze, non sono in grado di metterla in pratica, ci vorrebbe un esempio.


Ultima modifica effettuata da Carlo il 26/05/2018 alle 22:52


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 13:00
Domenica, 27/05/2018
Per quanto riguarda il nome del controllo.
Si potrebbe impostare il nome nello swicth

Codice sorgente - presumibilmente C# / VB.NET

  1. switch (fileCheck.Name)
  2.                         {
  3.                             case "label1":
  4.                                 a();
  5.                                 continue;
  6.                             case "label2":
  7.                                 b();
  8.                                 continue;
  9.                           ////////
  10.                         }


in c# accetta pure stringhe

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 13:21
Domenica, 27/05/2018
Testo quotato

Postato originariamente da Thejuster:

Crearti un componente personale non va bene?

Crei un controllo basato sulle CheckBox.
E aggiungi altri campi pubblici come riferimento
Così oltre ad avere il campo TAG puoi inserire più elementi a riferimento nel controllo
ed avere una migliore gestione.



Esatto, col mio codice basta aggiungere altri parametri alla funzione

per discriminare le varie attività da svolgere. :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:22
Domenica, 27/05/2018
Testo quotato

Postato originariamente da Mikelius:

Per quanto riguarda il nome del controllo.
Si potrebbe impostare il nome nello swicth

Codice sorgente - presumibilmente C# / VB.NET

  1. switch (fileCheck.Name)
  2.                         {
  3.                             case "label1":
  4.                                 a();
  5.                                 continue;
  6.                             case "label2":
  7.                                 b();
  8.                                 continue;
  9.                           ////////
  10.                         }


in c# accetta pure stringhe


Esatto e nel tuo caso che le routine sono tutte distinte va bene così, e il tag è libero per altri usi.
Invece se uno ha bisogno di un indice numerico si potrebbe costruire il nome del controllo cercato modificando l'ultimo carattere rappresentato da un numero.

Ultima modifica effettuata da Carlo il 27/05/2018 alle 13:34


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 14:12
Domenica, 27/05/2018
Testo quotato

Postato originariamente da Ultimo:

Testo quotato

Postato originariamente da Thejuster:

Crearti un componente personale non va bene?

Crei un controllo basato sulle CheckBox.
E aggiungi altri campi pubblici come riferimento
Così oltre ad avere il campo TAG puoi inserire più elementi a riferimento nel controllo
ed avere una migliore gestione.



Esatto, col mio codice basta aggiungere altri parametri alla funzione

per discriminare le varie attività da svolgere. :k:



Allora, per il momento resto usando il campo TAG e nel frattempo studio la creazione di controlli specializzati

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:06
Domenica, 27/05/2018
Testo quotato

Postato originariamente da Mikelius:

Salve, ho una domanda:

ho 4 checkBox (ma potrebbero diventare anche 20)
che se vidimate (chekkate non mi piace) ognuna svolge un compito. Non sono mutuamente eclusive.
Ho risolto in questo modo (nel TAG ho inserito numeri progressivi per ogni checkBox):

Codice sorgente - presumibilmente C#

  1. foreach (Control item in groupBoxOutput.Controls)
  2.             {
  3.                 if(item is CheckBox fileCheck)
  4.                 {
  5.                     if (fileCheck.Enabled)
  6.                     {
  7.                         switch (fileCheck.Tag)
  8.                         {
  9.                             case 1:
  10.                                 a();
  11.                                 continue;
  12.                             case 2:
  13.                                 b();
  14.                                 continue;
  15.                           ////////
  16.                         }
  17.                     }
  18.                 }
  19.             }



e buono? ci sono metodi più eleganti?



Mi sono documentato un po' i controlli si possono richiamare con l'indice, e con il nome, accorciando di molto il codice, non sono riuscito ad accedere alla proprietà .Checked attraverso l'indice, devo studiare ancora.
Per la mia personale conoscenza, quanto appreso apre un nuovo scenario di possibilità.

Credevo che Microsoft avesse deprecato l'uso delle matrici di controlli, sbagliavo, l'ha potenziata, tanto che ora tutti i controlli fanno sempre parte di una matrice.
Mi ero fatto influenzare dall'istruzione foreach, che credevo fosse il sistema principe per accedere ai controlli, ed è così se si devono per esempio abilitarli o disablitarli tutti.


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

Ultima modifica effettuata da Carlo il 29/05/2018 alle 4:32


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


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 1:07
Lunedì, 28/05/2018
Mi sono chiesto senza trovare risposta, come si determina in quale ordine vengono processati i controlli, ed eventualmente come scegliere l'ordine voluto.
Dal momento che ora ho capito come accedere ad un singolo controllo anche tramite indice, sapere come assegnare l'indice é prioritario.
Quando si aggiungono i controlli sul form o in un contenitore, gli indici che vengono automaticamente assegnati, potrebbero non avere la progressione voluta, non ho trovato info su come cambiare questa progressione.

La risposta sta nel file: Form1.designer.cs, autogenerato
es: 4 checkBox nel panel1

Codice sorgente - presumibilmente C# / VB.NET

  1. //
  2. // panel1
  3. //
  4. this.panel1.Controls.Add(this.checkBox1);
  5. this.panel1.Controls.Add(this.checkBox2);
  6. this.panel1.Controls.Add(this.checkBox3);
  7. this.panel1.Controls.Add(this.checkBox4);
  8. this.panel1.Location = new System.Drawing.Point(39, 25);
  9. this.panel1.Name = "panel1";
  10. this.panel1.Size = new System.Drawing.Size(214, 129);
  11. this.panel1.TabIndex = 12;


riordinare i controlli nell'ordine voluto
il primo controllo aggiunto avrà indice = 0
Il secondo 1, il terzo 2, ecc ecc


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

Ultima modifica effettuata da Carlo il 28/05/2018 alle 1:20


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo