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 4

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


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:03
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Carlo:
Ho provato il controllo dinamico, è veramente versatile.
Posto il sorgente, con le solite labels


Testo quotato

Postato originariamente da Ultimo:
:k:
Ottimo esempio Carlo
Mettilo in valutazione programmi come "Esempi"


L'esempio è di Thejuster, lo dovrebbe inserire lui...:asd:

Il programma nasconde un'insidia, e se non si sono letti tutti i post precedenti, difficilmente trovabile.

Alla riga:
VerificaConNome(panel3.Controls[((MioCheckBox)sender).ID].Name, (((MioCheckBox)sender).Checked));

Il nome della label viene trovato usando l'ID del checkbox e l'indice della label.
per fare in modo che gli indici corrispondano devono essere rispettate due condizioni:

1) il panel1 che conterrà le checkbox deve essere vuoto, perchè l'ID proviene da:
mio.ID = panel1.Controls.Count;
si potrebbe modificare questa riga in:
mio.ID = i - 1;

2)l'indice della label proviene dall'ordine in cui è stata inserita nel panel3. Una verifica in form1.designer.cs è d'obbligo
            //
            // panel3
            //
            this.panel3.Controls.Add(this.label4);
//indice = 0
            this.panel3.Controls.Add(this.label5);
//indice = 1
            this.panel3.Controls.Add(this.label6);
//indice = 2
            this.panel3.Controls.Add(this.label7);
//indice = 3
            this.panel3.Location = new System.Drawing.Point(38, 219);
            this.panel3.Name = "panel3";
            this.panel3.Size = new System.Drawing.Size(218, 43);
            this.panel3.TabIndex = 13;

Ultima modifica effettuata da Carlo il 29/05/2018 alle 12:49


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


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:07
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Thejuster:

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 ...


Si mi piacciono, sono un estimatore dei codici minimali, a volte mi ci diletto, anche a discapito della comprensione del programma.


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


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 12:20
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Carlo:

Testo quotato

Postato originariamente da Carlo:
Ho provato il controllo dinamico, è veramente versatile.
Posto il sorgente, con le solite labels


Testo quotato

Postato originariamente da Ultimo:
:k:
Ottimo esempio Carlo
Mettilo in valutazione programmi come "Esempi"


L'esempio è di Thejuster, lo dovrebbe inserire lui...



Giusto :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 14:06
Martedì, 29/05/2018
In questo caso può aiutare l'estensione per VS "CodeMaid"
tra le tante cose ha l'opzione per riordinare in modo alfabetico porzioni di codice.
In questo modo si evita di farlo a mano

Ultima modifica effettuata da Mikelius il 29/05/2018 alle 15:06
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:40
Martedì, 29/05/2018
Testo quotato

Postato originariamente da Mikelius:

In questo caso può aiutare l'estensione per VS "CodeMain"
tra le tante cose ha l'opzione per riordinare in modo alfabetico porzioni di codice.
In questo modo si evita di farlo a mano



Dove lo trovo?, è installato di default?

Ultima modifica effettuata da Carlo il 29/05/2018 alle 14:43


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


Messaggi: 525
Iscritto: 14/04/2017

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

Postato originariamente da Carlo:

Dove lo trovo?, è installato di default?



No, si installa a parte:

https://marketplace.visualstudio.com/items?itemName=SteveCa ...

trovi tante estensioni utili qui

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2306
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:13
Mercoledì, 30/05/2018
Cmq, non serve fare tutto questo.

Vi apro la mente perché vedo che avete preso seriamente la cosa di studiare il C#.
quindi questa soluzione può tornarvi molto utile in futuro.

Punto:

Abbiamo diversi controlli inseriti nel panel ma con indici che non sono ordinati correttamente.


Soluzione


Si crea un Enumeratore che vada ad enumerare tutti i controlli di un determinato oggetto.


Codice sorgente - presumibilmente Plain Text

  1. IEnumerable<Control> t = panel1.Controls.Cast<Control>();



Enumerato tutti i controlli, a noi interessa solo le CheckBox.
Quindi effettuiamo una selezione

Ma, siccome l'oggetto CheckBox non è un contenitore e non ha un indice di riferimento.
E meglio ordinare manualmente aggiungendo esempio al nome 1,2,3
O rimanere di default: CheckBox1,CheckBox2 etc.


Selezioniamo dall'enumeratore tutti i checkbox
poi li ordiniamo tramite il LinQ
Codice sorgente - presumibilmente Plain Text

  1. CheckBox[] cc = t.OfType<CheckBox>().ToArray<CheckBox>();
  2. c = c.OrderBy(x => x.Name).ToArray();



Successivamente avendo un array, possiamo accedere agli elementi con gli indici.
O Meglio ancora, effettuare una selezione diretta senza eseguire nessuna funzione di recupero.


Codice sorgente - presumibilmente Plain Text

  1. CheckBox trovato = c.Where(x => x.Name.Contains("1")).FirstOrDefault();



Che sarebbe:
Recuperami dall'array, il checkbox che nella proprietà del nome, ha come numero di ordinazione 1

Fatto questo, vi risparmiate la noia di andare a fare Cicli for, su cicli.
Switch, e quant'altro.


Codice Completo

Codice sorgente - presumibilmente C++

  1. public CheckBox TrovaElemento(string numero_di_riferimento)
  2. {
  3.  
  4.   try
  5.   {
  6.   IEnumerable<Control> t = panel1.Controls.Cast<Control>();
  7.   CheckBox[] c = t.OfType<CheckBox>().ToArray<CheckBox>();
  8.   c = c.OrderBy(x => x.Name).ToArray();
  9.  
  10.  CheckBox trovato = c.Where(x => x.Name.Contains(numero_di_riferimento)).FirstOrDefault();
  11.  
  12.  
  13.  
  14.   return trovato;
  15.   }
  16.   catch(Exception a)
  17.   {
  18.       throw new NullReferenceException(a.Message);
  19.    }
  20.  
  21. }


Ultima modifica effettuata da Thejuster il 30/05/2018 alle 18:14


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 18:59
Mercoledì, 30/05/2018
Testo quotato

Postato originariamente da Thejuster:
Che sarebbe:
Recuperami dall'array, il checkbox che nella proprietà del nome, ha come numero di ordinazione 1

Fatto questo, vi risparmiate la noia di andare a fare Cicli for, su cicli.
Switch, e quant'altro.


E' qui che mi serviva arrivare, nei casi in cui mi serve accedere ad un controllo direttamente, attraverso un indice numerico, che ho calcolato ad hoc, non voglio ciclare tutti i controlli.

Proverò al più presto il codice su un mio programma per capire in pratica e verificare.

Ultima modifica effettuata da Carlo il 30/05/2018 alle 18:59


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