|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ListView2ButtonClick
Доброе время суток, подскажите что я делаю не так пытаюсь удалить строку в ListView по нажатию в нём кнопки выдает ошибку
Код:
procedure TfrmMain.ListView2ButtonClick(const Sender: TObject; const AItem: TListItem; const AObject: TListItemSimpleControl); var v:integer; begin v:= ListView2.ItemIndex ; ListView2.Items.Delete( v ); exit; ShowMessage('Нажатие по элементу'); end; Да он ещё обращяется на onClik хотя я его об этом не просил Код:
procedure TfrmMain.ListView2Click(Sender: TObject); begin ShowMessage('Нажатие по элементу'); end; Последний раз редактировалось Admin, 12.10.2018 в 19:38. |
#2
|
|||
|
|||
Есть подозрение, что после удаления объкта происходит попытка возврата управления в объект, который уже не существует. Осюда и AV.
Как обойти - либо удалять извне списка, либо, например, через PostMessage отправить сообщение в форму, там отловить и удалить элемент. По поводу второго вопроса. Тут все просто. Клик получает ListView, соответсвенно, вызывается OnClick, потом видит, что кликнули на внутренном контроле и передает этот клик туда. ЗЫ. Это FMX что-ли? |
#3
|
|||
|
|||
Доброе время суток, lmikle не могли бы поподробней описать через метод PostMessage и если есть маленький приемчик заранее спасибо.
|
#4
|
|||
|
|||
закинул на кнопку
Код:
Begin v:= ListView2.ItemIndex ; frmMain.Button4Click(nil); end; Такая же ошибка прокинул Через UDP //клиент procedure TfrmMain.ListView2ButtonClick(const Sender: TObject; const AItem: TListItem; const AObject: TListItemSimpleControl); var v:integer; s:string; begin v:= ListView2.ItemIndex ; s:=IntToStr(v); IdUDPClient1.Send(s); End; //Сервер procedure TfrmMain.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); var s:string; v:Integer; begin s:=''; s:=bytestostring(AData); v:= StrToint(s); ListView2.Items.Delete( v ); end; через раз выдает ошибку можно как-нибудь убить старую процедуру (Клиент) ? Последний раз редактировалось Admin, 15.10.2018 в 19:44. |
#5
|
|||
|
|||
Сделал Вт так Работает
Код:
procedure TfrmMain.ListView2ButtonClick(const Sender: TObject; const AItem: TListItem; const AObject: TListItemSimpleControl); var v:integer; s:string; begin v:= ListView2.ItemIndex ; s:=IntToStr(v); Timer1.Enabled:=true; Memo2.Text:= s; exit; end; procedure TfrmMain.Timer1Timer(Sender: TObject); Var s:string; v:Integer; begin s:=Memo2.Text; v:= StrToint(s); if v>=0 then ListView2.Items.Delete( v ); Timer1.Enabled:=False; end; Последний раз редактировалось Admin, 15.10.2018 в 19:44. |
#6
|
|||
|
|||
Тема закрыта .
Админ: недельный бан за игнорирование правил форума. Последний раз редактировалось Admin, 15.10.2018 в 19:45. |