44

ボタンの背景色のさまざまなオプションを試していたところBackColor、Appearance カテゴリのプロパティを変更することになりました。次に、デフォルトの に戻しましたがControl、それでも他のボタンとは異なって見えます。

ボタンのスクリーンショット

プロジェクトをビルドして Visual Studio を再起動しようとしましたが、解決しませんでした。

別のボタンをドラッグしてコードをコピー/貼り付けするだけでよいことはわかっていますが、そもそもこれの原因と、適切に修正するにはどうすればよいでしょうか?

4

11 に答える 11

77

このBackColorプロパティは、既定ではアンビエント プロパティです。つまり、親コントロールから値を継承します。特定の値に明示的に設定すると、周囲の性質が上書きされ、その特定の値を使用するように強制されます。

標準の Windows ボタン コントロールはカスタム色をサポートしていないため、WinForms は実際にコントロールをカスタム描画して、デザイナーがその色をオーバーライドできるようにします。そうすれば、醜い緑または赤のボタンが必要な場合でも、それを行うことができます。

ここで起こったことは、ボタン コントロールのカスタム背景色を効果的に設定したことです (3D コントロールの背景色に設定しましたが、簡単に紫にすることもできました)。これにより、WinForms はコントロールをカスタム描画するように強制されます。指定した色で背景をペイントします。これにより、「フラットな」外観が得られます。背景色は、デフォルトのグラデーション効果を使用するのではなく、単一のカスタム カラーでペイントされるようになりました。ボタンは実際にはフラット 3D コントロール カラーでペイントされているため、Windows クラシック (Aero 以前) テーマではそれほど目立ちませんでし。しかし、Aero はグラデーションやその他の「ホット」な効果を追加したため、これは非常に目立ちます。

設定した値をクリアしてプロパティのアンビエントな性質を復元するには、[プロパティ] ウィンドウでプロパティを右クリックし、[リセット] を選択します。default(Color)プロパティを次のように設定することで、コードを使用して実行することもできます。

myButton.BackColor = default(Color);

UseVisualStyleBackColorまた、プロパティを に戻す必要があります。これは、カスタム背景色をサポートするためにプロパティが変更されるたびに、true自動的に に設定されます。falseBackColor

または、そのようなカスタム プロパティを完全に無視するように WinForms に指示し、Windows にボタン コントロールを描画するように指示することもできます。FlatStyleこれを行うには、プロパティを に設定しますFlatStyle.System

繰り返しますが、これはデザイナーまたはコードを介して行うことができます。これにより、背景色などのばかげたことを変更して恐ろしく醜いコントロールを作成するのを防ぐだけでなく、ホバー時の微妙な Aero フェード効果など、Win32 ボタン コントロールのネイティブな動作を WinForms アプリケーションに復元します。

これがデフォルトではない理由がわかりません。醜い非標準のコントロールを取得するには、特別なリクエストを行う必要があります。それは自動的に起こるべきではありません。何年もの間、あらゆる種類の醜いコントロールを作成してきた VB 6 プログラマーへの譲歩だったとしか思えません。

于 2012-05-13T04:03:33.550 に答える
13

UseVisualStyleBackColorデフォルトの背景色を変更すると、プロパティが falseに反転します。

それをtrueに戻すだけで、設定が完了します!

于 2012-05-13T04:09:32.233 に答える
11

ボタンのデフォルトの背景色を復元するには、次を使用します。

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True
于 2014-08-21T06:00:49.733 に答える
4

デフォルトの背景と前景をボタンに戻すには:

Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;
于 2018-02-18T19:23:00.013 に答える
4

私のために働いたもの:

CommandButton1.BackColor = vbButtonFace
于 2015-05-01T13:43:01.353 に答える
3
Button1.BackColor = Color.FromKnownColor(KnownColor.Control)

を使用しFromKnowColorて、システム カラーにアクセスします。それは本当に簡単です。

于 2016-10-28T17:58:24.517 に答える
0

質問のタイトルを参照すると、「デフォルトのボタン BackColor にリセットする方法は?」、私は次の方法で問題を解決しました:

たとえば、別のボタンを作成し、非表示にButtonFoo設定します。

ButtonFoo.visible = False

このボタンを使用してその色を取得し (デフォルトの色であるため)、別のボタンの色をリセットできます。たとえば、

ButtonChangedColor.BackColor = ButtonFoo.BackColor

ほら、どうぞ。色はデフォルトに戻ります:)

于 2014-05-20T03:19:56.203 に答える