TDBGrid 显示默认上下文弹出菜单而不是自定义菜单

问题描述 投票:0回答:2

我已经编写了代码将自定义 PopUpMenu 分配给 DBGrid 组件。这些更改已在 dfm 文件中完成:

object myGrid: TDBGrid
..................
PopupMenu = myPopUp
..................
end

object myPopUp: TPopupMenu
    Left = 528
    Top = 176
    object mnuFillDown: TMenuItem
      Action = actionFillDown
    end 
  end

object actionFillDown: TAction
  Caption = 'Fill Down'
  ShortCut = 16453
  OnExecute = actionFillDownExecute
end

但不知何故,显示的菜单是默认上下文菜单,而不是我的自定义菜单。我应该如何关闭默认上下文菜单并使用自定义菜单?

delphi delphi-7
2个回答
1
投票

让 DBGrid 显示弹出菜单的关键因素是将 DBGrids

PopupMenu
属性设置为弹出菜单。看来您是基于

完成此操作的
object myGrid: TDBGrid
..................
PopupMenu = myPopUp
..................
end

虽然缩进不正确。由于它仍然没有弹出,请验证设置是否正确。看下面我的例子,赋值是如何相对于 TDBGrid 对象缩进的。

这似乎是您的错误(假设

actionFillDownExecute
OnExecute
TAction actionFillDown
事件处理程序):

object myPopUp: TPopupMenu
  Left = 528
  Top = 176
  object mnuFillDown: TMenuItem
    Action = actionFillDownExecute
  end 
end

您无法将事件处理程序分配给需要

TMenuItem.Action
(或后代)的
TAction
属性。以上无法编译!

相反,您应该将

TAction
actionFillDown
分配给菜单项
Action
属性,并将
actionFillDownExecute
过程分配给操作的 OnExecute 事件。

这是测试项目的.dfm:

object Form1: TForm1
  Left = 313
  Top = 142
  Width = 393
  Height = 177
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 320
    Height = 120
    PopupMenu = myPopup
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
  end
  object myPopup: TPopupMenu
    Left = 336
    Top = 56
    object FillDown1: TMenuItem
      Action = actFillDown
    end
  end
  object ActionList1: TActionList
    Left = 336
    Top = 24
    object actFillDown: TAction
      Caption = 'Fill Down'
      OnExecute = actFillDownExecute
    end
  end
end

还有菜单图片:


0
投票

我在Delphi XE4中也遇到了同样的问题。发现如果在将 PopUpComponent 分配给 TDBGrid 之前将 OnDblClick 事件分配给它,就会发生这种情况。解决方案:删除对OnDblClick的引用,运行程序,添加对OnDblClick的引用。 很奇怪,但它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.