我有一个表格。该表单有一个用户控件。该用户控件有一个面板和一个上下文菜单。上下文菜单未附加到面板。还有其他动态创建并添加到此面板的控件。这些控件之一是按钮。当您单击此按钮时,我将 contextmenustrip 属性设置为上下文菜单。
我的问题是,我需要先阅读该上下文菜单中的项目,然后才能将上下文菜单附加到按钮。
每次加载表单时,我都会迭代该表单的所有子控件。如果一个控件有子控件,我会迭代这些控件,依此类推...我似乎无法访问未分配的上下文菜单。它尚未附加到任何控件,因此它看起来不是窗体上任何控件的子控件。
myConectMenu 永远不会像 this.Controls.Add(myConectMenu) 这样添加到用户控件中。该上下文菜单如何不嵌套在表单控件集合中?我怎样才能进入该上下文菜单?
这是设计师代码:
private System.Windows.Forms.ContextMenuStrip myContextMenu;
void InitializeComponent()
{
this.myContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.myContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.myToolStripMenuItem1,
this.myToolStripMenuItem2});
this.myContextMenu.Name = "myContextMenu";
this.myContextMenu.Size = new System.Drawing.Size(158, 92);
}
Run Code Online (Sandbox Code Playgroud)
更新 控件迭代发生在一个基类中,我的应用程序中的所有表单都从该基类派生。
myContextMenu 添加到一个私有组件对象中。我想这是因为当它没有附加到控件时,您可以在设计视图中看到上下文菜单。也许我可以利用这个?
private System.ComponentModel.IContainer components = null;
this.myContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
Run Code Online (Sandbox Code Playgroud)
正如您所观察到的,myContextMenu 未添加到 Controls 连接中。控件具有您应该检查的 ContextMenuStrip 属性。
public void FindContextMenuStrip(Control input)
{
foreach(Control control in input.Controls)
{
if(control.ContextMenuStrip != null)
DoSomethingWithContextMenuStrip(control.ContextMenuStrip)
if(control.Controls.Count > 0)
FindContextMenuStrip(control);
}
}
Run Code Online (Sandbox Code Playgroud)
将相关代码放入 DoSomethingWithContextMenuStrip 方法中。
编辑:
我看到你的评论,你指定了你想用 ContextMenuStrip 做什么。
如何在基类中创建一个方法来获取用户详细信息并创建上下文菜单条?
public ContextMenuStrip GetContextMenuStripForUser(User user)
{
//code to create context menu strip, with only those items enabled for which user has access.
}
Run Code Online (Sandbox Code Playgroud)
在最终形式中,使用此方法获取 ContextMenuStrip。
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |