質問: true; this.labels[i,j].DragEnter += new DragEventHandler(this.label1_DragEnter); this.labels[i,j].DragDrop += new DragEventHandler(this.label1_DragDrop); this.panel1.Controls.Add(this.labels[i, j]); } } ``` このラベルをクリックした際にクリックイベントを発生させ、クリックされたラベルのインデックスを取得することは可能でしょうか(上記コードではドラッグドロップイベント設定していますが...)? 例えばlabels[1,1]がクリックされた場合に、[1,1]というインデックスを取得したいです。 Senderの中身を見る限り、プロパティで設定した情報はあるのですが、インデックスの情報はありませんでした。
回答: まだ`Tag`プロパティを使っていないなら、そのプロパティにインデックス情報を書き込んで使えば良いでしょう。 Objectから派生した型のデータであればユーザーが任意に設定して使うことが出来ます。 適当なものが無ければ文字列を入れて都度変換するとか、あるいは自作のローカル定義オブジェクトを作っても良いのでは? Label クラス > > **プロパティ** > > > Tag コントロールに関するデータを格納するオブジェクトを取得または設定します。(継承元Control) > > > Control.Tag プロパティ > > コントロールに関するデータを格納するオブジェクトを取得または設定します。 > > > **注釈** > > Object クラスから派生した型は、このプロパティに割り当てることができます。 Tag プロパティが Windows フォームデザイナーで設定されている場合は、テキストのみを割り当てることができます。 > > Tag プロパティの一般的な用途は、コントロールに密接に関連付けられたデータを格納することです。 たとえば、顧客に関する情報を表示するコントロールがある場合、そのコントロールの Tag プロパティに顧客の注文履歴を含む DataSet を格納して、データにすばやくアクセスできるようにすることができます。 > > > こちらは実際の類似の適用例です。 C#:8パズルをコントロール配列を使って作ってみる 1次元配列としてのインデックスですが、Tagに文字列で格納して使っています。