10

ユーザーの注意を引くために、簡単に「フラッシュ」したいボタンがあります。ボタンのBackColorプロパティを別の色に変更してから、元に戻すのが最も簡単な方法だと思いました。だから私はこのようなことをします:

this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;

そして約1/2秒後:

myButton.BackColor = this.oldColor;

しかし、ボタンの背景色は、フォームの他のボタンよりも明らかに暗くなります!

最初は、ボタンの元の色が名前付きの色 (この場合は "Control") であることに特別な理由があるためだと思っていましたが、そうではありません。

さらに悪いことにmyButton.BackColor、デバッガーで見ると、

{Name=Control, ARGB=(255, 236, 233, 216)}

これはまさに正しいです!しかし、スクリーンショットを撮って色を確認すると、他のボタンと同じではありません!

何らかのマスキングが行われていますか?それとも、ある種のディザリングですか?

4

5 に答える 5

14

問題の原因がわかりました。という名前の別のプロパティ(ボタンとタブページのみのようです)があることがわかりましUseVisualStyleBackColorた。を計算するときに「ビジュアル スタイル」を使用するかどうかを制御しますBackColor。さらに悪いことに、 を設定するとすぐに に設定BackColorされfalseます。だから私はちょうどこれをやった:

this.oldUseVisualStyleBackColor = myButton.UseVisualStyleBackColor;
this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;

そして、リセットする準備ができたら:

myButton.BackColor = this.oldColor;
myButton.UseVisualStyleBackColor = this.oldUseVisualStyleBackColor;

(はい、BackColor最初にリセットしてから設定する必要がありますUseVisualStyleBackColor。)

なぜUseVisualStyleBackColorが使用されているのか、なぜそれが何をするのかはわかりませんが、現在は機能しているようです。

(ありがとう、マーク! あなたの助けがなければ、これを見つけることはできなかったでしょう!)

于 2009-02-03T11:24:18.933 に答える
3

違いは、1 つは通常の argb の色で、もう 1 つはシステム/既知の色であると思われます。

.NET のコントロールは、色が明示的 (このコントロールで設定) であるか継承されているかを追跡します。これにより、適切に元に戻すのが難しくなります...しかし、次のように でそれを行うことができるかもしれませんPropertyDescriptor:

    TextBox tb = new TextBox();
    tb.BackColor = Color.Red;
    // now set it back to inherited
    PropertyDescriptor prop = TypeDescriptor.GetProperties(tb)["BackColor"];
    if (prop.CanResetValue(tb))
    {
        prop.ResetValue(tb);
    }

少し不格好ですが、うまくいくはずです。

于 2009-02-03T10:30:41.647 に答える
2

または、次のように入力することもできます。

TextBox tb = new TextBox();
//Change the Backcolor
tb.BackColor = Color.Red;
//Resets the Backcolor to its default value, its pretty strange that you don't see the method but it works with allmost all properties
tb.ResetBackColor();
于 2010-03-09T10:24:45.887 に答える
0

簡単な方法:

myButton.BackColor = Color.Empty
于 2012-03-01T22:51:04.530 に答える