teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明追加

2016/05/31 15:44

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

answer CHANGED
@@ -24,7 +24,7 @@
24
24
  {
25
25
  // 背景色の変更
26
26
  this.BackColor = changecolor;
27
- // 本来のボタン処理
27
+ // 本来のボタンクリック処理
28
28
  base.OnClick(e);
29
29
  }
30
30
 

1

具体的なコードを追加

2016/05/31 15:44

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

answer CHANGED
@@ -1,4 +1,34 @@
1
1
  カスタムコントロールという方法があります。Buttonクラスから継承した新しいクラスを作って、クリックで色が変わる処理はそのクラスの機能としてコーディングします。
2
2
  フォームに貼り付けるボタンはすべてのその新しいボタンクラスにして、あとは普通のButtonクラスと同じようにボタンごとの機能を書けばいいです。
3
3
 
4
- [ここ](https://msdn.microsoft.com/ja-jp/library/7h62478z(v=vs.110).aspx)に詳しい解説がありますので試してみてください。
4
+ [ここ](https://msdn.microsoft.com/ja-jp/library/7h62478z(v=vs.110).aspx)に詳しい解説がありますので試してみてください。
5
+
6
+ [コメントへの回答]
7
+ MSDNの説明どおりに実装しているとすれば、あとは下記のコードを追加するればクリックすると色が変わるボタンコントロールができます。
8
+ ```C#
9
+ // 背景色用のプロパティ
10
+ protected Color changecolor = Color.FromArgb(255,0,0); // デフォルト赤
11
+ public Color ChangeColor
12
+ {
13
+ set
14
+ {
15
+ changecolor = value;
16
+ }
17
+ get
18
+ {
19
+ return changecolor;
20
+ }
21
+ }
22
+ // クリックイベント
23
+ protected override void OnClick(EventArgs e)
24
+ {
25
+ // 背景色の変更
26
+ this.BackColor = changecolor;
27
+ // 本来のボタン処理
28
+ base.OnClick(e);
29
+ }
30
+
31
+ ```
32
+ 上記のコードだと、クリックしたら色が変わりっぱなしになります。元に戻すのであれば、クリックイベントで現在の状態によって、色を変えるような処理を追加する必要があります。
33
+
34
+ ツールボックスに作成したカスタムコントロールが表示されますので、あとは通常のボタンコントロールのようにドラッグ&ドロップでフォームに貼り付けて使えます。