delphi - 自定义按钮,带有 PopupMenu 的 OnClick
问题描述
所以我创建了一个基于 cxButton 的自定义按钮。我希望在单击此按钮时显示一个弹出菜单。但由于某种原因,弹出菜单没有出现。我什至没有收到错误,我不知道为什么。
type
TcxGridButton = class(TcxButton)
private
FGridView : TcxGridDBTableView;
FPopup : TPopupMenu;
procedure AutoSize(Sender : TObject);
procedure ClearFilter(Sender : TObject);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent); override;
procedure Click; override;
published
property GridView : TcxGridDBTableView read FGridView write FGridView;
end;
这是我创建弹出菜单的部分
constructor TcxGridButton.Create(AOwner: TComponent);
var Item : TMenuItem;
P : TPoint;
begin
inherited;
Text:='Options';
FPopup := TPopupMenu.Create(Self);
Item := TMenuItem.Create(FPopup);
Item.Caption:='Nach Excel exportieren';
Item := TMenuItem.Create(FPopup);
Item.Caption:='Automatische Größenanpassung';
Item.OnClick:=AutoSize;
Item := TMenuItem.Create(FPopup);
Item.Caption:='Filter löschen';
Item.OnClick:=ClearFilter;
end;
现在,当我将此按钮放在表单上时,它会立即显示文本选项,因此构造函数似乎运行正常。
但是当我单击此按钮时,我会得到 Click、Self.ToString 和 Done。但是 Popup 菜单永远不会 Pops up 。我的错误是什么?
procedure TcxGridButton.Click;
begin
inherited; // call the inherited Click method.
ShowMessage('CLICK');
if not Assigned(FGridView) then Exit;
ShowMessage(Self.ToString);
FPopup.Popup(0,0);
ShowMessage('DONE');
end;
解决方案
答案很简单——您忘记将项目添加到弹出菜单中:
{ after creating each item }
FPopup.Items.Add(Item);
如果您不受约束,TCxButton
您可以使用标准 VCL 按钮,该按钮提供您尝试通过 property Style
set tobsSplitButton
和 property实现的功能DropDownMenu
。否则,您至少可以研究 VCL 的TCustomButton
源代码作为您自己实现的灵感。
推荐阅读
- python-3.x - 如果它出现在 pytorch&&tqdm __init__() 中可能会出现问题,缺少 1 个必需的位置参数:'code'
- java - 如何检查按下按钮时检查了哪些单选按钮
- android - 来自 Play 商店的 Android 应用程序更新
- php - 电子邮件始终采用 `if` 而不是 `else if`/`else` 路径
- swift - 一次将多个图像快速保存到文件系统,高 CPU
- powershell - 使用 powershell 获取会话 cookie
- javascript - 未捕获的 ReferenceError:toggleFunction 未在 HTMLButtonElement.onclick 中定义
- android - 绘制矩形时 Y 轴具有意外值
- excel - 如何在 Excel 中选择和引用路径?
- c# - 使用接口返回类型时,ServiceRemoting V2_1 仍然抛出序列化异常