 Posts:69
 |
| 01 feb 2009 16.25 |
|
Temo d'essermi perso in una bolla di sapone... Quando sono qua: For i = 0 To CheckedListBox1.Items.Count - 1 If CheckedListBox1.GetItemChecked(i) = False Then ... End If Next Al posto dei puntini pensavo di mettere: CheckedListBox1.GetItemCheckState(i) = CheckState.Checked ma non funziona, quindi che devo fare? Un'altra cosa: c'è un'opzione per evitare di dover cliccare due volte sull'item per checkarlo? Attualmente una lo seleziona ed una lo checka.
|
|
|
|
|
 Posts:69
 |
| 01 feb 2009 16.42 |
|
In alternativa si può ciclare tutti gli Item credo in modo più efficente così: For Each NameItem As String in CheckedListBox.Items ... Next Rimango sempre col dubbio di come si Checkano gli Item da codice, ovviamente non al momento dell'aggiunta degli Item nella CheckedListBox, per quello si fa così: CheckedListBox.Items.Add("123"), True) |
|
|
|
|
 Posts:662
 |
| 01 feb 2009 18.33 |
|
Rimango sempre col dubbio di come si Checkano gli Item da codice, ovviamente non al momento dell'aggiunta degli Item nella CheckedListBox, per quello si fa così: CheckedListBox.Items.Add("123"), True) Molto semplice: For Each i As Integer In Me.CheckedListBox1.CheckedIndices Me.CheckedListBox1.SetItemChecked(i, False) Next HTH Alberto. |
|
|
|
|
 Posts:69
 |
| 01 feb 2009 22.47 |
|
Posted By Alberto (DNW TEAM) on 01 feb 2009 07.33 Rimango sempre col dubbio di come si Checkano gli Item da codice, ovviamente non al momento dell'aggiunta degli Item nella CheckedListBox, per quello si fa così: CheckedListBox.Items.Add("123"), True) Molto semplice: For Each i As Integer In Me.CheckedListBox1.CheckedIndices Me.CheckedListBox1.SetItemChecked(i, False) Next HTH Alberto. Forse mi sono spiegato male: non voglio uncheckare gli Items già checkati, ma checkare tutti gli Items (checkati o non checkati che siano). |
|
|
|
|
 Posts:662
 |
| 01 feb 2009 23.34 |
|
Forse mi sono spiegato male: non voglio uncheckare gli Items già checkati, ma checkare tutti gli Items (checkati o non checkati che siano). Ancora + semplice: For i As Integer = 0 To Me.CheckedListBox1.Items.Count - 1 Me.CheckedListBox1.SetItemChecked(i, True) Next |
|
|
|
|
 Posts:69
 |
| 01 feb 2009 23.52 |
|
Posted By Alberto (Admin) on 02 feb 2009 12.34 Forse mi sono spiegato male: non voglio uncheckare gli Items già checkati, ma checkare tutti gli Items (checkati o non checkati che siano). Ancora + semplice: For i As Integer = 0 To Me.CheckedListBox1.Items.Count - 1 Me.CheckedListBox1.SetItemChecked(i, True) Next Ottimo grazie. |
|
|
|
|
 Posts:69
 |
| 02 feb 2009 00.59 |
|
Un'altra cosa, se io ho questi tre: CheckedListBox1.Items.Add("Checkprova1", True) CheckedListBox1.Items.Add("Checkprova2", True) CheckedListBox1.Items.Add("Checkprova3", True) e voglio uncheckare il secondo faccio così: CheckedListBox1.SetItemChecked(1, False) Ma se conosco solo il nome (Checkprova2) e non so se è primo, secondo o terzo, come faccio per uncheckarlo? |
|
|
|
|
 Posts:94
 |
| 02 feb 2009 09.11 |
|
Ciao in realtà gli oggetti della lista che inserichi sono delle stringhe, perciò con un ciclo indicizzato intercetti l'oggetto che ha il nome che cerchi a quel punto conosci anche l'indice e la procedura è identica alla prima... attenzione che se due oggetti hanno la stessa stringa questa è valida solo per la prima ugualianza.... in per ovviare a questo problema potresti scriverti una classe ad hoc dove ridefinisci il metodo ToString() e gestisi la cosa a livello di codice con una lista parallela a quella della CheckedListBox.... |
|
|
|
|
 Posts:69
 |
| 02 feb 2009 09.45 |
Risposta accettata
|
No, due oggetti non hanno mai la stessa stringa, su quello non c'è problema. Come faccio a conoscere l'indice una volta che trovo il nome? Ovvero cosa devo mettere al posto dei puntini? For Each i As String In CheckedListBox1.Items If i = "Checkprova2" Then CheckedListBox1.SetItemChecked ( ... , False) End If Next
|
|
|
|
|
 Posts:48
 |
| 02 feb 2009 11.48 |
|
Scusate se m'intrometto uscendo dall'argomento. Qualcuno mi sa dire come mai, mi sta arrivando un fiume di link al forum in casella di posta? Questo succede da ieri e non ho attivato alcuna spunta per ricevere. Chiedo qui, dato che da qui sto ricevendo il 70% del fiume e non vedo come contattare l'amministratore Lambert |
|
|
|
|
 Posts:69
 |
| 02 feb 2009 11.53 |
|
Succede anche a me.  |
|
|
|
|
 Posts:662
 |
| 02 feb 2009 12.00 |
|
Chiedo qui, dato che da qui sto ricevendo il 70% del fiume e non vedo come contattare l'amministratore Il problema si sta verificando dopo l'aggiornamento del modulo di gestione dei Forums. Lo abbiamo testato in locale per circa un mese e non dava nessun tipo di problema, ieri lo abbiamo messo su e ha generato questo errore inaspettato. Stiamo cercando di capire con l'assistenza (che si trova negli USA, quindi si devono ancora alzare da letto  ) che tipo di problema può essere successo. Nel frattempo vi chiediamo cortesemente di pazientare ancora un po' scusandoci per l'accaduto. Grazie. .  otNetWork Team:. |
|
|
|
|
 Posts:69
 |
| 02 feb 2009 14.40 |
|
Tornando IT, ho fatto delle prove per cercare di modificare in False un elemento della CheckedListBox (tutti True) di cui conosco solo il nome. Ho provato con questo codice ma dà errore di modifica enumeratore: Dim ii As Integer = 0 For Each i As String In CheckedListBox1.Items If i = "Checkprova2" Then CheckedListBox1.SetItemChecked(ii, False) Else ii += 1 End If Next Ho quindi provato del codice alternativo per aggirare il problema, ottengo il risultato voluto ma non mi sembra che sia granchè il procedimento: Dim ii As Integer = 0 Dim iii As Integer For Each i As String In CheckedListBox1.Items If i = "Checkprova2" Then iii = ii Else ii += 1 End If Next CheckedListBox1.SetItemChecked(iii, False) Pareri? O c'è un metodo più elegante per ottenere il risultato? Rinnovo anche la richiesta di sapere se qualcuno sa come fare per evitare di dover cliccare due volte su un elemento per checkarlo o uncheckarlo. |
|
|
|
|
 Posts:94
 |
| 03 feb 2009 11.40 |
|
Ciao, io pensavo più a questo codice: perdonami ma non ricordo le sintassi VB e ti scrivo in C# forse qualche buon anima ti può aiutare nella conversione Integer I =0; for ( I =0; I< CheckedListBox1.Items.Count; I++) { if ( CheckedListBox1.Items[I] == "Checkprova2") { break; } } CheckedListBox1.SetItemChecked(I,false); in sostanza anziche iterare su tutte le stringe con il ciclo for each usi il più classico ciclo for a indice numerico per ricavare l'indice che ti interessa, a questo punto blocchi il ciclo per non sprecare iterazini. Con l'indice noto il gioco è fatto.... |
|
|
|
|
 Posts:69
 |
| 03 feb 2009 12.05 |
|
Inserito da Netso su 03 feb 2009 12.40 Ciao, io pensavo più a questo codice: perdonami ma non ricordo le sintassi VB e ti scrivo in C# forse qualche buon anima ti può aiutare nella conversione Integer I =0; for ( I =0; I< CheckedListBox1.Items.Count; I++) { if ( CheckedListBox1.Items[I] == "Checkprova2") { break; } } CheckedListBox1.SetItemChecked(I,false); in sostanza anziche iterare su tutte le stringe con il ciclo for each usi il più classico ciclo for a indice numerico per ricavare l'indice che ti interessa, a questo punto blocchi il ciclo per non sprecare iterazini. Con l'indice noto il gioco è fatto.... Il tuo codice in vb è così 8ho usato un convertitore): Dim I As Integer = 0 For I = 0 To CheckedListBox1.Items.Count - 1 If CheckedListBox1.Items(I) = "Checkprova2" Then Exit For End If Next CheckedListBox1.SetItemChecked(I, False) É molto simile al mio codice, solo che non si può usare se bisogna uncheckare più check (mi sono dimenticato di dirlo, colpa mia). In questo caso si può usare un Arraylist per elencare tutti gli Integer risultanti da un altro Arraylist che contiene gli String. Grazie comunque per la tua risposta. Se ci sono soluzioni migliori rimango a disposizione.  |
|
|
|
|
 Posts:94
 |
| 03 feb 2009 13.50 |
|
Ho capito... Forse la cosa si risolve in modo molto più semplice CheckedListBox1.FindString(String) metodo che restituisce l'indice della stringa che cerchi... esiste anche in overload dove gli passi anche il valore di partenza dell'indice di ricerca... se non trova la stringa restituice -1 |
|
|
|
|
 Posts:69
 |
| 03 feb 2009 15.51 |
|
Inserito da Netso su 03 feb 2009 14.50 Ho capito... Forse la cosa si risolve in modo molto più semplice CheckedListBox1.FindString(String) metodo che restituisce l'indice della stringa che cerchi... esiste anche in overload dove gli passi anche il valore di partenza dell'indice di ricerca... se non trova la stringa restituice -1 Eccellente, grazie mille. Ho compattato il tutto così: CheckedListBox1.SetItemChecked(CheckedListBox1.FindString("Checkprova2"), False) |
|
|
|
|
 Posts:94
 |
| 03 feb 2009 17.06 |
|
Sono contento di esserti stato d'aiuto.... Attenzione che non sono sicuro che il metodo SetItemChecked accetta come valore sull'indice -1, questo potrebbe sollevarti un'eccezione che basta gestire in: Integer I = CheckedListBox1.FindString("Checkprova2"); if (I > -1 ) { CheckedListBox1.SetItemChecked(I,false); } senza usare try catch che non è elegante per gestire queste situazioni |
|
|
|
|
 Posts:69
 |
| 03 feb 2009 17.14 |
|
Grazie, ma questo non è un problema perchè saranno inseriti per la ricerca solo String di cui sono sicuro che esistano i corrispondenti elementi nel CheckedListBox. |
|
|
|
|