【.NET Core】ToolStripのクリックイベントでItemコンポーネントを取得する
環境
- Visual Studio 2019
- Windows Forms App(.NET Core)
はじめに
下図のようにToolStripコンテナを配置し、その子にボタンを置きました。
そして、そのボタンのクリックイベントを実装しようとしましたが、ToolStripの子であるボタンにはイベントが設定できません。
代わりに、ToolStripのItemClickイベントというものが有効化されますが、引数のsenderにはToolStripが入ってしまいます。
本当はボタンが入っていることを期待していたのに・・・。
そこで、クリックしたボタンを同じItemClickイベントで取得する方法を説明します。
結論から言うと、ToolStrip内のItemを取得することは非常に簡単でした。
e.ClickedItemで取得できる
ボタンなどのクリックされたItemは、イベントハンドラーメソッドの第2引数であるToolStripItemClickedEventArgs e
のClickedItemプロパティ
に格納されています。
なので、e.ClickedItem
でクリックされたItemを取得できます。
ToolStriptItemClickedEventArgsクラスはその名の通り、コンストラクタにクリックされたItemを受け取りインスタンス生成します。
そして、そのクリックされたItemはClickedItemプロパティに設定されます。
ToolStriptItemClickedEventArgsクラスについて、詳しくは公式ドキュメントをご覧ください。
例えば上の画像のようにToolStrip内に複数ボタンを配置してそれぞれで異なる処理をしたい場合だと
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { Console.WriteLine(e.ClickedItem.GetType()); //クリックされたItemの型を表示 var itemType = e.ClickedItem.GetType(); var item = e.ClickedItem as itemType; //クリックされたItemの取得 switch (item.Tag) //Itemに設定したTagによって分岐、nameなどでも可 { case ○○: //Itemごとに分岐させ処理する break; case ○○: break; } }
という風に書けばOKです。