【问题标题】:How to extend an existing ContextMenuStrip?如何扩展现有的 ContextMenuStrip?
【发布时间】:2012-06-11 18:52:14
【问题描述】:

我的应用程序的每个工作区控件都有一个共同的ContextMenuStrip。 这个ContextMenuStrip 包含 4 个项目(“前移”、“后移”和“删除控件”)。

现在我想为一个控件扩展它。 此控件上有一个DataGridView,我想要一个附加项来删除选定的DataGridViewRow。

这是我试过的代码:

    private void extendContextMenuOfDataGridViewRow (DataGridViewRow row) {
        ContextMenuStrip ctx = new ContextMenuStrip();
        foreach (ToolStripMenuItem item in this.ContextMenuStrip.Items) {
            ctx.Items.Add(item);
        }
        ctx.Items.Add(new ToolStripSeparator());
        ToolStripMenuItem ctxDeleteRow = new ToolStripMenuItem("Delete row");
        ctxDeleteRow.Name = "ctxDeleteRow";
        ctxDeleteRow.Click += new EventHandler(ctxDeleteRow_Click);
        ctx.Items.Add(ctxDeleteRow);

        row.ContextMenuStrip = ctx;
    }

在foreach 循环的第一项添加到ctx.Items 后,调试器将离开整个方法,而公共ContextMenuStrip 中缺少第一项。

我该怎么做?

【问题讨论】:

  • “前移”、“后移”和“删除控件”= 3 个项目,而不是 4 个。
  • 您到底想达到什么目的?您想在事件发生时将 MenuItem 添加到 ContextMenuStrip?
  • 我将 [separator] 作为第四项(但类似于 html-tags)。我认为这就是它消失的原因。

标签: c# contextmenustrip


【解决方案1】:

如果你想扩展一些控件的功能,你可以

a) 创建扩展方法

public void DoSomething(this MyExtendedControl mec, DataGridViewRow row)
{
}

b) 创建一个继承自您不满意的控件的新类(甚至创建一个全新的控件),当您可以根据需要覆盖/添加内容时

取决于您的具体需求,从您的描述中无法理解...

【讨论】:

  • 我不明白如何使用扩展方法来解决我的问题。
  • @pinki,也许试着更好地解释你的问题......似乎我不是唯一一个不明白的人。
  • 我想向现有的ContextMenuStrip 添加一个新项目,该项目仅对一个控件可见。
【解决方案2】:

我已经很久没有使用 WinForms 了,但是您确定可以将同一个 Row 对象同时分配给两个不同的 Strips 吗?

foreach (ToolStripMenuItem item in this.ContextMenuStrip.Items) {
    ctx.Items.Add(item);
}

我严重怀疑这是否应该按设计工作,因为一行必须与其父级“对话”,并且通过将其添加到另一个条带中,恐怕您正在重新分配父级。

相反,我会在公共菜单中添加一个项目,但将其Visible 属性添加到false。
然后我会捕捉菜单打开事件,如果目标是DataGridViewRow,则使项目可见。

【讨论】:

  • 我想将扩展的ContextMenuStrip 设置为参数的Row 对象。这个Row 对象此时没有任何ContextMenuStrip。我要扩展的ContextMenuStrip 来自包含DataGridView 的控件。
  • 我看到的是你正在使用一个现有的 ContextMenuStrip 并创建一个新的 (ctx)。在 C# 中没有“扩展”对象之类的东西。我的观点是,如果您将Add 项目转移到ctx,它们很可能会从原来的项目中消失。因此,最好将相同的上下文菜单条分配给行和其他控件both,并根据上下文显示/隐藏“删除行”项。
猜你喜欢
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
相关资源
最近更新 更多