Как отключить редактирование TListView при нажатии элемента?

Я хочу отключить вход в режим редактирования, когда я нажимаю на выбранный элемент TListView, но не отключаю его полностью (устанавливая свойство ReadOnly=True). Я хочу по-прежнему иметь возможность редактировать его другими способами. Это возможно ?


person Marus Nebunu    schedule 06.07.2014    source источник


Ответы (1)


Я не вижу простого способа определить, как именно возникает уведомление LVN_BEGINLABELEDIT. И это уведомление LVN_BEGINLABELEDIT запускает редактирование представления списка на месте.

Итак, я думаю, вам, вероятно, придется придумать немного хакерское решение. Добавьте в форму поле Boolean, например, с именем FCanEditListView. Затем, где бы вы ни запускали режим редактирования, установите этот флаг True непосредственно перед запуском режима редактирования, а затем верните его на False после этого:

procedure TForm1.Button1Click(Sender: TObject);
var
  Item: TListItem;
begin
  Item := ListView1.Selected;
  if Assigned(Item) then
  begin
    FCanEditListView := True;
    Item.EditCaption;
    FCanEditListView := False;
  end;
end;

Затем добавьте обработчик события OnEditing представления списка, чтобы переключить поведение следующим образом:

procedure TForm1.ListView1Editing(Sender: TObject; Item: TListItem;
  var AllowEdit: Boolean);
begin
  AllowEdit := FCanEditListView;
end;
person David Heffernan    schedule 06.07.2014