Bonjour,
Je d�veloppe actuellement une application c++/CLR de gestion de musiques avec une playlist int�gr�e.
L'utilisateur doit s�lectionner une musique dans cette playlist mat�rialis�e par une CheckListBox.
Mon probl�me est le suivant : lorsque l'utilisateur clique 1 fois sur un des items de la checklistbox, celui-ci est s�lectionn� et coch�. Mais je voudrais qu'il ne puisse y avoir qu'un seul item coch�, et que cet item coch� soit toujours l'item s�lectionn�.
Je suis au courant de la m�thode qui consiste � parcourir les items et de tous les d�cocher puis re-cocher l'�lement s�lectionn�. Seulement je dispose �galement d'un bouton "descendre" et d'un bouton "monter" qui permettent de r�organiser la checklist. Mon code, ins�r� dans la fonction SelectedIndexChanged, fonctionne lors des clics sur l'item de la checklistbox, mais le programme s'interrompt avec le message d'erreur "index -1 n'existe pas" lors du clic sur un de ces boutons.
Je joins ci dessous le code de mon projet .... Pourriez-vous m'�clairer ?
Merci beaucoup
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 private: System::Void checkedListBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { int i; int j = checkedListBox1->SelectedIndex; for (i = 0;i < checkedListBox1->Items->Count;i++) { checkedListBox1->SetItemCheckState(i, CheckState::Unchecked); } checkedListBox1->SetItemCheckState(j, CheckState::Checked); }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Void Form1::MoveDown(Object^ sender, System::EventArgs^ e) { checkedListBox1->BeginUpdate(); int numberOfSelectedItems = checkedListBox1->SelectedItems->Count; // when going down, instead of moving through the selected items from top to bottom // we'll go from bottom to top, it's easier to handle this way. for (int i = numberOfSelectedItems - 1; i >= 0; i--) { // only if it's not the last item if (checkedListBox1->SelectedIndices[i] < checkedListBox1->Items->Count - 1) { // the index of the item that is currently below the selected item int indexToInsertIn = checkedListBox1->SelectedIndices[i] + 2; // insert DOWN the item that we want to move down checkedListBox1->Items->Insert(indexToInsertIn, checkedListBox1->SelectedItems[i]); // removing it from its old place checkedListBox1->Items->RemoveAt(indexToInsertIn - 2); // highlighting it in its new place checkedListBox1->SelectedItem = checkedListBox1->Items[indexToInsertIn - 1]; checkedListBox1->SetItemCheckState((indexToInsertIn - 1), CheckState::Checked); } } checkedListBox1->EndUpdate(); }
Partager