在Winforms中动态生成第二个上下文菜单

时间:2010-05-17 06:03:27

标签: .net winforms

我有一个包含一些选项的上下文菜单。如果用户选择了特定的选项,我想在第二个菜单中出现一个选项列表。这些选择将来自数据存储,并且对该用户是唯一的。

我看到设计师如何静态添加一组选项,以便用户进行选择。但是,如果您需要数据而不是在设计器中设计它,您会怎么做?

2 个答案:

答案 0 :(得分:2)

一种方法是创建一个级联菜单:在上下文菜单中,添加一个项目作为“父”项,并将一个子菜单项添加到父项。然后附加父项的DropDownOpening事件的事件处理程序,并添加这样的内容:

private void ParentMenuItem_DropDownOpening(object sender, EventArgs e)
{
    IEnumerable<string> items = GetItems();
    _parentMenuItem.DropDownItems.Clear();
    foreach (var item in items)
    {
        _parentMenuItem.DropDownItems.Add(item);
    }
}

这将在每次打开时填充子菜单(根据需要添加缓存)。

从技术上讲,这可以在不添加虚拟子项的情况下工作,但通过添加子项,父菜单将显示指示存在级联子菜单的箭头。

答案 1 :(得分:0)

我会添加以下内容来为新项目建立事件处理程序:

private void ParentMenuItem_DropDownOpening(object sender, EventArgs e)
{
    IEnumerable<string> items = GetItems();
    _parentMenuItem.DropDownItems.Clear();
    int i=0;
    foreach (var item in items)
    {
        _parentMenuItem.DropDownItems.Add(item);
        _parentMenuItem.DropDownItems[i].click += new EventHandler(menuItem_click);
        i++;
    }
}`enter code here`