- ベストアンサー
C#イベントハンドラの統一でスッキリさせる方法
- C#のtrackBarを複数配置している場合、各trackBarごとにイベントハンドラを個別に記述する必要があります。しかし、ジェネリクスやデリゲートを活用することで、コードをスッキリさせることができます。
- visual stdio c# 2008を使用している場合でも、ジェネリクスやデリゲートを利用することができます。
- ジェネリクスやデリゲートを使うことで、trackBarのイベントハンドラを一元化することができ、コードの可読性や保守性を向上させることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
全部TrackBar1になってますよ?? コントロールの配列は、こんな感じにします。 TabIndexが1~4だと仮定して、振り分けています。 public partial class Form1 : Form { private System.Windows.Forms.TrackBar[] trackBars; private char[] trackColor = new char {'赤','青','緑','透'}; private void Form1_Load(object sender, EventArgs e) { this.trackBars = new System.Windows.Forms.TrackBar[] { this.trackBar1, this.trackBar2, this.trackBar3, this.trackBar4 }; for (int i = 0; i < this.trackBars.Length; i++) this.trackBars[i].Scroll += new EventHandler(this.trackBars_Scroll); } private void trackBars_Scroll(object sender, EventArgs e) { previewcolor(((System.Windows.Forms.TrackBar) sender).Value, trackColor[((System.Windows.Forms.TrackBar) sender).TabIndex - 1]); } }
その他の回答 (2)
ANo.1 です。 誤解を生む説明でした。 イベントハンドラはコントロールのイベントプロパティに+= でアタッチできます。 これはイベントハンドラを複数設定できるということです。 オリジナルの共通イベントハンドラを別に作って、それを個別のコントロールにイベントハンドラに+= すれば良いと思います。 プロパティの設定画面で行うイベントハンドラを割り当ては、デザイナの範疇なので、それぞれコントロール固有のモノであるべきかなと(私は勝手に)思い込んでます。 まぁなんていうか、それ以上の理由も理屈も今のところ見つからないですね。 #Region ですか?見やすくなりますね・・・(それだけですが)
イベントのプロパティを自動で生成していますね。だからそれぞれ便利に作ってくれる。 統一する?できますよ。名前を統一すればいいだけです。 またはプロパティのイベントハンドラの設定項目を選択してみてください。ドロップダウンリストが出てるはずです。既にあるハンドラを選び直せばいいですね。 デリゲートという類になります。イベントハンドラがどのようにコントールに設定されているか、ソースで確認できますよ。イベントハンドラをテキスト選択して全ての参照を検索なんてするとすぐ出るはずです。 まぁでも・・・個人的にはイベントハンドラを統一するのは・・・後々のバグの温床になりそうな。
お礼
ありがとうございます!解決できそうです! が!普通は統一しないものなんですか?それが普通なら統一しないで、regionなんかで分割しようと思うのですが(´Д`)