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

我已经尝试过类似的事情:

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集合。它是一个组件,而不是控件。

我会尝试通过TreeNode传递ContextMenuStrip。

另外,您可以构造类并在运行时附加上下文菜单。

也-

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

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

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

10-06 04:01