2

多くのタップページを持つタブパネルを含むフォームがあります。それぞれに独自のコンテキスト メニューがあります (右クリックで表示)。しかし、ToolStripMenuItem を複数の ContextMenuStrips に追加すると、最後のメニュー ストリップだけが実際にこのメニュー項目を持ちます。簡単なコード例は次のとおりです。

    ToolStripMenuItem tim_refresh = new ToolStripMenuItem("Refresh", null, (o, e) =>
        {
            MessageBox.Show("Refresh");
        });

    ContextMenuStrip cms1 = new ContextMenuStrip();
    cms1.Items.Add(tim_refresh);

    ContextMenuStrip cms2 = new ContextMenuStrip();
    cms2.Items.Add(tim_refresh);

    this.tblDataManagerObjects.ContextMenuStrip = cms1;
    this.tblDataSourceTypes.ContextMenuStrip = cms2;

このメニューを 1 つずつ表示すると、最初は空になります...どうすれば目的を達成できますか?

4

2 に答える 2

1

これは、ビジュアルが同時に複数の異なるビジュアルの子になることができないためです。あなたの場合、同時にtim_refreshの子です。cms1cms2

の 2 つの完全に別個のインスタンスを作成する必要がありますToolStripMenuItem

編集:

factor メソッドで視覚的な作成を抽出して、複数のオブジェクトのインスタンス化を簡素化できます。

private ToolStripMenuItem CreateToolStripMenuItem(string name)
{
   return new ToolStripMenuItem(name, null, (o, e) =>
        {
            MessageBox.Show(name);
        });
}

// then just call it once per each menu strip
ContextMenuStrip cms1 = new ContextMenuStrip();
cms1.Items.Add(CreateToolStripMenuItem("Refresh"));

ContextMenuStrip cms2 = new ContextMenuStrip();
cms2.Items.Add(CreateToolStripMenuItem("Refresh"));
于 2011-11-29T08:56:48.700 に答える