Ik heb een vreemd probleem in m'n C#/WinForms applicatie.
Ik heb een ListBox, met daarnaast 2 knoppen waarmee ik Items in die ListBox naar boven of naar onder kan verplaatsen.
De code om een Item naar boven te verplaatsen ziet er als volgt uit:
De code om een item naar beneden te verplaatsen is deze:
Nu, allemaal goed en wel wat is het probleem nu?
Het MoveUp'en gaat goed. Ik selecteer een item, en klik op MoveUp; het item wordt
naar boven verschoven, en dat item blijft het geselecteerde item zodat ik kan blijven
MoveUppen tot dat dat item het bovenste is.
Als ik een item 'MoveDown', dan lukt het in eerste instantie ook. Het geselecteerde
item wordt naar beneden verplaatst, en dat item is het geselecteerde. Althans, het is zichtbaar
het geselecteerde.
Wanneer ik een tweede keer 'move down' doe, dan wordt niet het item dat zichtbaar geselecteerd is
naar beneden gemoved, maar het item dat erboven staat.
Het is dus zo, dat ik die selectedIndex wel op een nieuwe waarde zet, maar als ik debug en ik ga
kijken wat die selectedIndex is als ik de tweede keer MoveDown doe, dan blijkt dat SelectedIndex
opnieuw de oude waarde heeft.
Zeer vreemd, zeker als je weet dat het 'MoveUp'en' totaal geen probleem is.
Iemand bekend met dit fenomeen? Ik kan niet direct een fout in m'n code zien.
Ik heb een ListBox, met daarnaast 2 knoppen waarmee ik Items in die ListBox naar boven of naar onder kan verplaatsen.
De code om een Item naar boven te verplaatsen ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public static void MoveUp(ListBox aListBox)
{
ListBoxItem dummy;
int iIndex;
// Move up is only possibly when this is not the first item
iIndex = aListBox.SelectedIndex;
if( iIndex > 0 )
{
dummy = (ListBoxItem)aListBox.Items[iIndex - 1];
aListBox.Items[iIndex - 1] = aListBox.SelectedItem;
aListBox.Items[iIndex] = dummy;
aListBox.SelectedIndex = iIndex - 1;
}
} |
De code om een item naar beneden te verplaatsen is deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public static void MoveDown(ListBox aListBox)
{
ListBoxItem dummy;
int iIndex;
iIndex = aListBox.SelectedIndex;
if( iIndex < aListBox.Items.Count - 1 )
{
dummy = (ListBoxItem)aListBox.Items[iIndex + 1];
aListBox.Items[iIndex + 1] = aListBox.SelectedItem;
aListBox.Items[iIndex] = dummy;
aListBox.SelectedIndex = iIndex + 1;
}
} |
Nu, allemaal goed en wel wat is het probleem nu?
Het MoveUp'en gaat goed. Ik selecteer een item, en klik op MoveUp; het item wordt
naar boven verschoven, en dat item blijft het geselecteerde item zodat ik kan blijven
MoveUppen tot dat dat item het bovenste is.
Als ik een item 'MoveDown', dan lukt het in eerste instantie ook. Het geselecteerde
item wordt naar beneden verplaatst, en dat item is het geselecteerde. Althans, het is zichtbaar
het geselecteerde.
Wanneer ik een tweede keer 'move down' doe, dan wordt niet het item dat zichtbaar geselecteerd is
naar beneden gemoved, maar het item dat erboven staat.
Het is dus zo, dat ik die selectedIndex wel op een nieuwe waarde zet, maar als ik debug en ik ga
kijken wat die selectedIndex is als ik de tweede keer MoveDown doe, dan blijkt dat SelectedIndex
opnieuw de oude waarde heeft.
Zeer vreemd, zeker als je weet dat het 'MoveUp'en' totaal geen probleem is.
Iemand bekend met dit fenomeen? Ik kan niet direct een fout in m'n code zien.
https://fgheysels.github.io/