19

私は自分のソリューション (基本的なソリューション) を実装しており、満足しています。

問題は、「Add」メソッドを使用して ToolStripItemCollection に新しいアイテムを追加するときに、いくつかのオーバーロードが発生することです...意味のあるオーバーロードは、文字列パラメーター、画像パラメーター、および EventHandler パラメーターです。

ドロップダウン リストは実行時に動的な履歴として機能するため、コンパイル時に空になることを意味します。これは、デザイナー サーフェイス (クリック時) を使用する標準的な方法でイベント ハンドラーを追加できないことを意味します。上記のオーバーロードを使用せざるを得ません。

私のイメージは役に立ちませんが、イベント ハンドラーを動的に追加することに興味があり、助けが必要です。

URL: http://msdn.microsoft.com/en-us/library/bxdt0s8t.aspx

私を助けるオーバーロードは他にないので、イメージを使用する必要があります...誰もがこれを回避し、このオーバーロードされたバージョンの add メソッドを完全に満たす方法を教えてくれます。

ティア。

更新:現在のプロジェクトでこれをやり直しましたが、より洗練されたコードを使用していますが、原則は同じで、実行時に動的にイベント ハンドラーを追加します。家に帰ったら、サンプルコードでこれを更新します。

4

4 に答える 4

37

私が行う方法は、の配列を作成し、ToolStripMenuItemsその配列に追加する項目を入力することです。クリック イベントを処理するメソッドを 1 つ作成し、実行時に作成した各アイテムの一意の部分をチェックします。NameそれぞれのまたはTagプロパティを使用してみてくださいToolStripMenuItem。次にAddRange、追加するメニューのその場で使用します。したがって、コードは次のようになります。

private void BuildMenuItems()
{
    ToolStripMenuItem[] items = new ToolStripMenuItem[2]; // You would obviously calculate this value at runtime
    for (int i = 0; i < items.Length; i++)
    {
        items[i] = new ToolStripMenuItem();
        items[i].Name = "dynamicItem" + i.ToString();
        items[i].Tag = "specialDataHere";
        items[i].Text = "Visible Menu Text Here";    
        items[i].Click += new EventHandler(MenuItemClickHandler);
    }

    myMenu.DropDownItems.AddRange(items);
}

private void MenuItemClickHandler(object sender, EventArgs e)
{
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
    // Take some action based on the data in clickedItem
}
于 2009-11-18T17:19:55.177 に答える
1

何が問題なのですか:

ToolStripItem item = toolStripItems.Add("MyItem");
item.Click += new EventHandler(....);

何か不足していますか?

于 2009-11-19T20:41:05.807 に答える
0

私は Philip Wallace と同様の問題を抱えていました。ToolStripItem と ToolStripMenuItem の違いに注意することが重要です。ToolStripItems を ToolStripMenuItem の DropDownItems に追加すると、それらが表示され、すべてのプロパティが正しく設定され、コードでアクセスできるようになりますが、テキストは表示されません! ToolStripMenuItem に切り替えると、これが解決しました。

元の質問に関しては、空のコンストラクターを使用して、必要なフィールドを設定しています。(私は.net 4.0でvb.netにいますNew ToolStripMenuItem()が、MustInheritタグがあるため呼び出すことができないため、このクラスを作成しました:

Public Class DynamicToolStripMenuItem
    Inherits ToolStripMenuItem

    Public Sub New(value As Integer, text As String, handler As System.EventHandler)
        MyBase.New()
        Me.Text = text
        Me.Visible = True
        Me.Tag = value
        AddHandler Me.Click, handler
    End Sub
End Class
于 2013-03-28T22:53:19.510 に答える