c# - 尝试从自定义类以编程方式添加在设计时添加到表单的 winforms 控件

标签 c# winforms

好的,所以我在 winforms 应用程序中向 form1 添加了一个上下文菜单条。我在其他地方有一个标准类,它以树节点为参数并对其执行操作。我想做的一件事是设置上下文菜单。上下文菜单是在设计时手动添加到表单中的。

我试过这样的事情:

public static void MethodThatAddsAContextMenu(TreeNode node)
{
    node.ContextMenuStrip = Application.OpenForms[0].Controls["myContextMenu"] as ContextMenuStrip;
}

还有一百万种微妙而不那么微妙的变化。我的代码找不到控件。尽管当我通过我的监视列表深入时,上下文菜单看起来实际上并不是表单控件集合的一部分。

感谢任何帮助。我也在我的 iPad 上做了这个,看起来它的格式没问题,但如果不对,我们深表歉意。

提前致谢。

好的,Boo 根据你的建议可能更容易发布代码:

private static TreeNode CreateSecurityNode(Security Sec)
{
    TreeNode sn = new TreeNode(Sec.SecurityName);
    sn.Tag = Sec;
    sn.ContextMenuStrip = Application.OpenForms[0].Container.Components["securityContext"] as ContextMenuStrip;
}

容器返回 null

最佳答案

ContextMenuStrip 不会是 Form.Controls 的一部分收藏。它是一个组件,而不是一个控件。

我会尝试将 ContextMenuStrip 与 TreeNode 一起传递。

或者,您可以让您的类在运行时构造并附加上下文菜单。

还有-

您可以填充 List<ContextMenuStrip>使用所有上下文菜单(或 Dictionary<ContextMenuStrip> )并将其公开为表单的属性:

public List<ContextMenuStrip> contextMenus {get;set;}

// // form load event, possibly
this.contextMenus.Add(myContextMenu);

关于c# - 尝试从自定义类以编程方式添加在设计时添加到表单的 winforms 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745508/

相关文章:

c# - 空分隔符代表什么

c# - WCF 服务未反序列化枚举值

c# - 重用 LINQ 查询

c# - .NET 应用程序中带有 Web 浏览器控件的拼写检查器

c# - 工具提示不会显示第二次创建表单

c# - 从对象、 Entity Framework 自动创建数据库表

c# - 跟踪在 C# 中不起作用

winforms - DataGridView右键菜单/复制示例?

c# - 如何单击网页中的按钮

c# - 如何使用复选框选项禁用 C# Winform Treeview 控件中的特定复选框?