4

在 StringGrid 中,有时当我右键单击时会在下面看到不需要的菜单。这是 Windows 弹出窗口吗?

弹出屏幕截图

如何防止出现此弹出窗口而不是我自己的?

我的选项中有 goAlwaysShowEditor。

我已将 StringGrid.PopupMenu 设置为我的弹出窗口。

如果右键单击,我已经设置了 StringGrid.OnMouseDown 以显示我的弹出窗口。

4

2 回答 2

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;
于 2012-05-20T20:12:38.783 回答
7

这是每个 Windows EDIT 控件中的弹出菜单。可能是世界上最知名的菜单(唯一的竞争来自系统菜单)。您想要它,因为您的用户期望它(并且需要它)。当您编辑单元格中的文本时,该TStringGrid控件实际上会创建一个标准的 Windows EDIT 控件,这很棒。这样你就得到了它的弹出菜单。

此外,要显示您自己的弹出菜单(当您不编辑单元格时),您不需要设置OnMouseDown处理程序。PopupMenu设置属性就足够了。事实上,使用OnMouseDown处理程序触发弹出菜单是非常糟糕的,因为这样菜单只会在用户右键单击控件时显示(而不是,例如,当他按下控件上的“上下文”按钮时)键盘)。

如果您真的希望显示自己的弹出菜单,即使用户正在编辑单元格,您也必须手动为他提供常用的撤消、复制、剪切、粘贴、Unicode 内容等选项。你肯定不想这样吗?

于 2012-05-20T20:01:02.500 回答