ボタンの元々の色は?

解決


Some  2009-01-15 13:25:56  No: 145666  IP: 192.*.*.*

お世話になります、初心者のSomeです。

Vb2008でFormにボタンを貼り付けて、クリックするたびにON/OFF動作をさせます。
この時、ボタンの色(BackColor)をON状態で変更し、OFFになったら元の色(デフォルト色)
に戻したいと思っています。
この時、BackColorプロパティには何を設定したらよいのでしょうか。
"White"も違うし、"LightGray"も違う気がします。
デザイン画面でプロパティを見ると「システムのControl」と言う設定になっています。

よろしくお願いします。

.

編集 削除
aetos  2009-01-15 13:49:14  No: 145667  IP: 192.*.*.*

SystemColors.Control です。

編集 削除
Some  2009-01-15 14:45:35  No: 145668  IP: 192.*.*.*

aetosさん、早速のお返事をありがとうございました。

教えていただいた "SystemColors.Control" を試したところ、うまくデフォルト色に
戻りました。ありがとうございました。

でも、コードを記述しているときのコードスニペットにはこの候補は表示されませんね。
どうしてなんでしょうか?
推奨されないと言うことなんでしょうか??

.

編集 削除
魔界の仮面弁士  2009-01-15 16:19:47  No: 145669  IP: 192.*.*.*

> ボタンを貼り付けて、クリックするたびにON/OFF動作をさせます。
On/Off 制御を行うのであれば、本来は Button の仕事では無く、
Appearance = Button に設定した RadioButton / CheckBox の範疇かと。

> BackColorプロパティには何を設定したらよいのでしょうか。
初期値に戻す場合は、Button1.BackColor = Color.Empty です。
あるいは、Button1.ResetBackColor() でも OK。

そのほか、UseVisualStyleBackColor プロパティにも注意が必要かと。

編集 削除
特攻隊長まるるう  2009-01-15 16:39:32  No: 145670  IP: 192.*.*.*

> でも、コードを記述しているときのコードスニペットにはこの候補は表示されませんね。
> どうしてなんでしょうか?

Dim txt As String
txt = System.Environment.NewLine
System.Environment.NewLine は入力候補には出ません。

SystemColors.Control は定数ではありませんし、
BackColor プロパティも独自の Color 構造体を
定義して設定できるので当然のことだと思います。
入力候補を網羅することは馬鹿げていると思います。

編集 削除
aetos  2009-01-15 18:29:37  No: 145671  IP: 192.*.*.*

Control.DefaultBackColor でもいいんでしょうかね。

> 初期値に戻す場合は、Button1.BackColor = Color.Empty です。

これ、ドキュメントにありました?

編集 削除
Some  2009-01-15 18:47:21  No: 145672  IP: 192.*.*.*

魔界の仮面弁士さん、特攻隊長まるるうさん、レスをありがとうございました。

SystemColors.ControlでもColor.EmptyでもResetBackColor()でも同様の効果が得られました。
その中で、Color.Emptyはコードスニペットの候補に出現しますね。

皆さん、ありがとうございました。

.

編集 削除
魔界の仮面弁士  2009-01-16 00:24:42  No: 145673  IP: 192.*.*.*

> 同様の効果が得られました。
似ていますが、aetos さんの方法と私の方法は異なる結果となります。

BackColor はアンビエント プロパティなので、親の色を受け継ぎます。
(Font プロパティもアンビエントです)

デザイナ上は、初期値が SystemColors.Control であるように見えますが、
それは Form の背景色が SystemColors.Control であるためです。

たとえば、背景色を黄色にした Panel の上に Button を配置した場合、
ボタンの色も黄色になります(UseVisualStyleBackColor = False)。

また、この状態で Panel の色を変えれば、Button の色も変わります。
ただし、Button に背景色が設定されている場合は、そちらが優先されます。
親の色を引き継ぐのは、ボタンの背景色が未設定の時のみです。


ResetBackColor や Color.Empty による初期値リセットというのは、
この「未設定状態」に戻すことを意味します。
アプリの仕様によっては、aetos さんの方法と私の方法とで
異なる結果となりえますので、注意してくださいね。


> その中で、Color.Emptyはコードスニペットの候補に出現しますね。
IntelliSense ではなく?

コードスニペットって、[?] + [Tab] や右クリックの「スニペットの挿入」で選択する機能ですよね。

編集 削除
Some  2009-01-16 06:53:03  No: 145674  IP: 192.*.*.*

魔界の仮面弁士 さん、おはようございます。

なるほど、よくわかりました。
丁寧な解説をありがとうございました。

> > その中で、Color.Emptyはコードスニペットの候補に出現しますね。
> IntelliSense ではなく?

失礼いたしました。

編集 削除
魔界の仮面弁士  2009-01-16 15:32:17  No: 145675  IP: 192.*.*.*

# 書き忘れ。m(_ _)m

》aetos さん
>> 初期値に戻す場合は、Button1.BackColor = Color.Empty です。
> これ、ドキュメントにありました?
BackColor と Color.Empty の関係については、
下記の「解説」の項が参考になるかと思います。
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.ambientvalueattribute.aspx

編集 削除
aetos  2009-01-16 15:52:55  No: 145676  IP: 192.*.*.*

なるほど。

お恥ずかしながら、アンビエント プロパティなるものを知りませんでした。
弁士さんに感謝です。

編集 削除