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

#delphi #edit #delphi-6 #tlistview

#delphi #Редактировать #delphi-6 #tlistview

Вопрос:

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

Ответ №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;