4

に 20 個のアイテムがありList<myObject>ます。UserControlそれぞれに関連付けられた のインスタンスがあります。各オブジェクトはMenuStrip、適切な項目がクリックされたときに UserControl を表示する必要がある を介してアクセスできます。現在、それらのそれぞれにイベント ハンドラーがありますが、これは機能しますが、これを単純化し、すべてのアイテムに 1 つのイベント ハンドラーを使用する方法が存在するかどうか疑問に思っていました。

これは可能ですか?もしそうなら、そうするための最善の方法は何ですか。

編集: 他の誰かがこの問題について意見を提供できますか? Mailo の回答に問題があります。基本的に必要なことは、正しい MenuStrip 項目がクリックされたときに適切なプロパティとしてUserControl格納されたものを表示できるイベント ハンドラーを作成することだけです。List<myObject>これを行うより簡単な方法はありますか?foreach理想的には、ループがリストを通過してハンドラーをセットアップできるようにしたいと思います。

これで私を助けてくれる人はいませんか?

4

3 に答える 3

3

それほど難しいことではありません。まず、メニュー項目をリスト内のコントロールに関連付ける方法が必要です。

1)リストがあるため、インデックスが最も簡単な方法です( Dictionary<> を使用してこの関連付けを簡素化できます)。つまり、最初のメニュー項目をクリックしたときに、myObjecList[0]表示したいとしましょう。2 番目の MenuItem をクリックすると、次のmyObjectList[1]ように表示されます。これを行うには、各メニュー項目に移動し、[プロパティ] でプロパティに値を割り当てTagます。最初のメニュー項目にはTag0 を割り当て、2 番目の項目にはTag1 を割り当てます。

2) 1 つのイベント ハンドラーを作成し、同じハンドラーをすべてのメニュー項目に割り当てます。イベント ハンドラーは次のようになります。

private void myToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // source menu item which was clicked
            ToolStripMenuItem item = sender as ToolStripMenuItem;

            if(item != null) 
            {
                int index = int.Parse(item.Tag.ToString()); // get the index from Tag
                myObject control = myObjectList[index];

                // do your stuff with your control

            }
        } 
于 2013-05-26T06:00:24.320 に答える