powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не пойму в чем ошибка
8 сообщений из 8, страница 1 из 1
Не пойму в чем ошибка
    #32723629
'FaTsO'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 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...

В чем проблема??? Заранее спасибо
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32723664
roman11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В случае, когда остается один элемент, у тебя срабатывают сразу два if'а. Нужно писать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (условие)
{
}
else if (условие)
{
}
else if (условие)
{
}
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32723665
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин юзай
Код: plaintext
[src][/src ]
а то половина вешей теряется :)


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32723670
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в логике программы:

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;
}
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32723758
'FaTsO'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь ещё одна проблемка
А как тогда реагировать на то что Item'ов нету...
Видимо то что я написал
if (ListView->Items->Count == 0)
{
Application->MessageBox("Удалять нечего", "Сообщение", MB_OK);
}
Не адекватно реагирует...(((
Опять пишет Access violetion...
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32723854
roman11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ты имеешь в ввиду все тот же код из первого поста, то тогда поставь
int i = ListView->Selected->Index после проверки условия на количество элементов.

Кстати возможна ситуация, что элементы в ListView есть, но не один из них не выделен. Поэтому с обращением к ListView->Selected тоже надо бы поаккуратней.
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32724024
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно у тебя в логиге проги ошибка
сделай попробуй так

f (ListView->Items->Count == 0)
{
Application->MessageBox("Удалять нечего", "Сообщение", MB_OK);
return;
}



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Не пойму в чем ошибка
    #32724460
'FaTsO'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал так
if (ListView->Selected == NULL)
{
Application->MessageBox("бла-бла-бла", "Сообщение", MB_OK);
}
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не пойму в чем ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]