gpt4 book ai didi

c# - 动态上下文菜单

转载 作者:行者123 更新时间:2023-11-30 17:06:19 26 4
gpt4 key购买 nike

我正在尝试提出一种解决方案来创建可在运行时生成的动态上下文菜单。我已经实现了一个 IGuiCommand 接口(interface),它实现了类似于普通命令模式的东西。

interface IGuiCommand
{
Execute();
Undo();
bool CanUndo {get;set;}
Redo();
string CommandName {get;set;}
string CommandDescription {get;set;}
}

想法是允许右键单击的控件提交它自己的命令列表以显示在给定的上下文菜单中。

虽然我可以让每个控件构建一个上下文菜单,但我更愿意使用单个上下文菜单并动态生成菜单,以便在运行时更轻松地进行管理。当控件状态或应用程序状态更改时,我希望上下文菜单能够反射(reflect)更改。例如,如果我右键单击一个复选框,则该复选框会向上下文菜单提交一个启用或禁用命令,以根据该复选框的当前选中值显示。

我认为如果我有某种方法可以知道哪个控件被“右键单击”以便为该特定控件调出上下文菜单,我可以很容易地实现这一点。

似乎令人惊讶的是 ContextMenu 事件没有提供一个 EventArg 来指示被右键单击的控件(或任何会导致弹出上下文菜单的命令)

最佳答案

您只需覆盖 ContextMenuStrip_Opening 事件。发送者对象是一个 ContextMenuStrip,它包含一个 SourceControl 元素。当您应用适当的转换时,您将可以访问所需的一切。

private void contextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
var contextMenu = (sender as ContextMenuStrip);
if (contextMenu != null) {
var sourceControl = contextMenu.SourceControl;
contextMenuStrip1.Items.Clear();
//contextMenuStrip1.Items.Add(...);
}
}

关于c# - 动态上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com