1

ToolStripMenuItemのインスタンスを作成し、それをサブメニューとしてフォームの2つの異なるメニュー(コンテキストメニューとメニューストリップ)に追加したいと思いました。私はそれを機能させる方法を知っていますが、なぜこれが機能しないのか疑問に思っています。

    private static string[] parameters = { "itemOne", "itemTwo", "itemThree"};

    private void MainForm_Load(object sender, EventArgs e)
    {
        foreach (string s in parameters)
        {
            ToolStripMenuItem addThis = new ToolStripMenuItem(s);
            existingToolStripMenuItem.DropDownItems.Add(addThis);
            existingMenuItem.DropDownItems.Add(addThis);
        }
    }

DropDownItems.Add()ステートメントの1つをコメントアウトするか、2つの別々のインスタンスを作成すると、正常に機能することに気付きました。なぜこれを行うのですか?

4

1 に答える 1

1

の実装について学習すると、2番目の呼び出しがから削除さToolStripItemCollection.Addれることがわかります。existingMenuItem.DropDownItems.Add(addThis);addThisexistingToolStripMenuItem.DropDownItems

したがって、ILSpyなどの逆コンパイラーの使用方法を学ぶことは.NET開発者にとって重要です。

http://wiki.sharpdevelop.net/ilspy.ashx

考えられる回避策は、わかったとおりに2つの別々のインスタンスを作成することです。2つのインスタンスを接続する場合は、ActionListを使用できます。

http://www.lextm.com/2012/04/packaging-crads-actionlist-for-net-via-nuget/

于 2012-05-25T03:20:26.427 に答える