Probl�me CheckListBox WinForm
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:
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:
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();
} |