我想在单击TListView所选项目时禁用进入编辑模式但不完全禁用它(设置属性ReadOnly = True)。我想仍然可以通过其他方法编辑它。有可能吗?
答案 0 :(得分:3)
我没有看到任何简单的方法来准确检测LVN_BEGINLABELEDIT
通知是如何产生的。而LVN_BEGINLABELEDIT
通知会触发列表视图的就地编辑。
所以,我认为你可能需要提出一个有点hacky的解决方案。在表单中添加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;