在StringGrid中,有时右键单击时会出现下面不需要的菜单。这是一个Windows弹出窗口吗?
如何防止此弹出窗口出现而不是我自己的?
我的选项中有goAlwaysShowEditor。
我已将StringGrid.PopupMenu设置为弹出窗口。
我已设置StringGrid.OnMouseDown以显示我的弹出窗口,如果它是右键单击。
答案 0 :(得分:8)
你可以像这样覆盖虚拟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;
答案 1 :(得分:7)
这是每个Windows EDIT控件中的弹出菜单。可能是世界上最知名的菜单(唯一的竞争来自系统菜单)。您想要它,因为您的用户的期待它(需要它)。当您编辑单元格中的文本时,TStringGrid
控件实际上创建了一个标准的Windows EDIT控件,这很棒。因此,您将获得其弹出菜单。
此外,要显示您自己的弹出菜单(当您不编辑单元格时),您不需要设置OnMouseDown
处理程序。设置PopupMenu
属性就足够了。事实上,这是非常不好的使用OnMouseDown
处理程序,以触发弹出菜单,因为那时菜单才会显示在用户右键点击控件(而不是,例如,当他按下“上下文“键盘上的按钮。”
如果你真的想你自己的弹出式菜单显示,即使用户正在编辑一个单元格,你真的给他他一贯的选择撤销,复制,剪切,粘贴,Unicode的东西,等等,手动。当然你不想要那个?