ボタンの元々の色は?

解決


Some  2009-01-15 22:25:56  No: 145666

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

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

よろしくお願いします。

.


aetos  2009-01-15 22:49:14  No: 145667

SystemColors.Control です。


Some  2009-01-15 23:45:35  No: 145668

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

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

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

.


魔界の仮面弁士  2009-01-16 01:19:47  No: 145669

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

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

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


特攻隊長まるるう  2009-01-16 01:39:32  No: 145670

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

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

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


aetos  2009-01-16 03:29:37  No: 145671

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

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

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


Some  2009-01-16 03:47:21  No: 145672

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

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

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

.


魔界の仮面弁士  2009-01-16 09:24:42  No: 145673

> 同様の効果が得られました。
似ていますが、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 15:53:03  No: 145674

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

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

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

失礼いたしました。


魔界の仮面弁士  2009-01-17 00:32:17  No: 145675

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

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


aetos  2009-01-17 00:52:55  No: 145676

なるほど。

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加