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