2

大規模な C# アプリケーションを作成します。ポイントは、アプリケーションのユーザーがコントロールの色を調整できるようにすることです。System.Drawing.SystemColors をオーバーライドする (このアプリケーションのコンテキストでのみ) 解決策があれば、すべてのコントロールの値を手動で設定する必要がなくなります。私の問題の簡単な解決策を知っている人はいますか? ありがとう

4

6 に答える 6

1

最善のアプローチは、各コントロールを継承し、そのデフォルトの表示プロパティを設定することだと思います。これにより、簡単にカスタマイズして再利用できる標準のWinFormsコントロールのライブラリが提供されます。詳細については、こちらをご覧ください(VBでは、C#で例を見つけることができませんでした)。

于 2009-04-30T12:20:42.417 に答える
1

アプリケーション設定バインディングを見てください。すべてのコントロールに対してこれを行う方法はわかりませんが、コントロール ツリーを単純に再帰するだけで十分です。

于 2009-04-30T12:09:53.143 に答える
0

このようなことをするために、以下のコードを書きました。通常とは異なるコントロールには特別な処理が必要なので、特に満足していませんが、うまくいきました。Painter のインスタンスを保持し、フォームを作成するたびに Apply を呼び出し、フォームを引数として渡します。すべての子コントロールを再帰し、外観を変更します

public class Painter
{
    Color foreColor;
    Color backColor;
    Color altBackColor;
    Color buttonColor;
    Font font;

    public Painter(Color foreColor, Color backColor, Color altBackColor, Color buttonColor, Font font)
    {
        this.foreColor=foreColor;
        this.backColor=backColor;
        this.altBackColor=altBackColor;
        this.buttonColor=buttonColor;
        this.font=font;
    }    

    public void Apply(Control c)
    {
        if(c==null)
            return;

        c.ForeColor = foreColor;

        c.BackColor = (c is Button ) ? buttonColor
                                     : backColor;

        if (c is DataGridView)
        {
            var dgv = (DataGridView) c;
            dgv.BackgroundColor = BackColor;
            dgv.AlternatingRowsDefaultCellStyle.BackColor = altBackColor;
            dgv.ColumnHeadersDefaultCellStyle.BackColor = buttonColor;
        }

        c.Font = font;

        foreach(Control child in c.Controls)
            Apply(child);
    }
}
于 2009-04-30T12:34:25.783 に答える
0

システムのデフォルトを上書きする必要はありませんが、独自の色を定義できます。

Color NastyColour = Color.FromArgb(1, 2, 3);

1 = 赤 2 = 緑 3 = 青

于 2009-04-30T12:09:42.193 に答える
0

残念ながら、アプリケーション用に Windows の配色を変更することはできません。

Winforms を使用すると、フォーム上のすべてのコントロールの背景色などを変更できますが、多くの領域 (ボタンのベベルの色やウィンドウのタイトル バーなど) では、おそらく自分でコントロールをペイントする必要があります。

于 2009-04-30T12:12:10.797 に答える
-1

$1000 を使って、DevExpress のコピーを入手してください。彼らのフレームワークを使用して大規模なアプリケーションを作成していますが、スキニング機能は優れています。

これが最良の答えとは思えないことは承知していますが、アプリケーション全体のスキニング機能を探している場合は、サードパーティ ライブラリが適している可能性があります。

于 2009-04-30T12:38:20.580 に答える