在 StringGrid 中,有时当我右键单击时会在下面看到不需要的菜单。这是 Windows 弹出窗口吗?
如何防止出现此弹出窗口而不是我自己的?
我的选项中有 goAlwaysShowEditor。
我已将 StringGrid.PopupMenu 设置为我的弹出窗口。
如果右键单击,我已经设置了 StringGrid.OnMouseDown 以显示我的弹出窗口。
您可以像这样覆盖虚拟CreateEditor
方法(虽然不是一个好的解决方案,我知道:-):
type
TStringGrid = class(Grids.TStringGrid)
protected
function CreateEditor: TInplaceEdit; override;
end;
implementation
function TStringGrid.CreateEditor: TInplaceEdit;
begin
Result := inherited CreateEditor;
TMaskEdit(Result).PopupMenu := Form1.PopupMenu1;
end;
这是每个 Windows EDIT 控件中的弹出菜单。可能是世界上最知名的菜单(唯一的竞争来自系统菜单)。您想要它,因为您的用户期望它(并且需要它)。当您编辑单元格中的文本时,该TStringGrid
控件实际上会创建一个标准的 Windows EDIT 控件,这很棒。这样你就得到了它的弹出菜单。
此外,要显示您自己的弹出菜单(当您不编辑单元格时),您不需要设置OnMouseDown
处理程序。PopupMenu
设置属性就足够了。事实上,使用OnMouseDown
处理程序触发弹出菜单是非常糟糕的,因为这样菜单只会在用户右键单击控件时显示(而不是,例如,当他按下控件上的“上下文”按钮时)键盘)。
如果您真的希望显示自己的弹出菜单,即使用户正在编辑单元格,您也必须手动为他提供常用的撤消、复制、剪切、粘贴、Unicode 内容等选项。你肯定不想这样吗?