|
|
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
В TListView есть какието Items пишу обработчик кнопки Удалить void __fastcall TForm1::ButtonDeleteClick(TObject *Sender) { int i = ListView->Selected->Index; if (ListView->Items->Count == 0) { Application->MessageBox("Удалять нечего", "Сообщение", MB_OK); } if (ListView->Items->Count == 1) { ListView->Items->Clear(); } if (ListView->Selected->Index == ListView->Items->Count - 1) { ListView->Selected->Delete(); ListView->Items->Item[i - 1]->Selected = true; //ListView->Items->Item ->Selected = false; } else { ListView->Selected->Delete(); ListView->Items->Item->Selected = true; //ListView->Items->Item->Selected = false; } } Когда Items'ов много он спокойно удаляет... Но когда доходит до того момента когда остается всего один Item он прерывает работу программы и пишет Access violetion... В чем проблема??? Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 11:54 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
В случае, когда остается один элемент, у тебя срабатывают сразу два if'а. Нужно писать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 12:04 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
Блин юзай Код: plaintext ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 12:05 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
Ошибка в логике программы: if (ListView->Items->Count == 1) { ListView->Items->Clear(); // вот здесь вы удалили все элементы - Selected стал равный 0 } // а вот здесь вы обращаетесь к объекту по адресу 0 и просите, чтобы он вернул индекс - нехорошо, не по джентльменски:) if (ListView->Selected->Index == ListView->Items->Count - 1) { ListView->Selected->Delete(); ListView->Items->Item[i - 1]->Selected = true; //ListView->Items->Item->Selected = false; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 12:07 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
Извиняюсь ещё одна проблемка А как тогда реагировать на то что Item'ов нету... Видимо то что я написал if (ListView->Items->Count == 0) { Application->MessageBox("Удалять нечего", "Сообщение", MB_OK); } Не адекватно реагирует...((( Опять пишет Access violetion... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 12:31 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
Если ты имеешь в ввиду все тот же код из первого поста, то тогда поставь int i = ListView->Selected->Index после проверки условия на количество элементов. Кстати возможна ситуация, что элементы в ListView есть, но не один из них не выделен. Поэтому с обращением к ListView->Selected тоже надо бы поаккуратней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 13:06 |
|
||
|
Не пойму в чем ошибка
|
|||
|---|---|---|---|
|
#18+
Точно у тебя в логиге проги ошибка сделай попробуй так f (ListView->Items->Count == 0) { Application->MessageBox("Удалять нечего", "Сообщение", MB_OK); return; } ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 14:05 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32723670&tid=2034324]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 347ms |

| 0 / 0 |
