5

私は WinForms アプリケーションを構築しており、ほとんどのコントロールで特定の色を使用しています。これは、WinForms デザイナーから実行することもあれば、コードに直接実行することもあります。

私はどこかにそのような静的クラスを持っています:

 public static class MyColors
    {
        public static Color DarkGreen = Color.FromArgb(0, 70, 62);
        ...
        public static Color Orange = Color.FromArgb(239, 132, 16);

    }

コードでこれらの色を簡単に使用できますが、デザイナーから行うことは不可能であり、次のエラーが発生します。

MyColors.DarkGreen は、Int32 の有効な値ではありません。

(これらの色の Int32 表現を保存しようとしましたが、これは同じエラーで失敗します)

私が現在使用している解決策は、デザイナーで RGB カラー コードを使用し、コードで MyColors クラスの値を使用することです。Visual Studio のすべての置換機能を使用して変更を行っています。これは良い解決策ではありませんが、これまでのところより良いアイデアを見つけることができませんでした。

何か案は ?


注:「KnownColors」の変更を検討していないため、この質問については知っていますが、これは私のものとは少し異なります。

4

5 に答える 5

2

プロパティウィンドウ自体の動作を変更する必要があるため、これは可能ではないと思います。「255、128、64」と入力しても機能するのは、[プロパティ] ウィンドウに、入力されたものをシステム カラー、名前付きの「Web」カラー、または RGB 指定の色に変換しようとするコードが含まれているためです。は Int32 の有効な値ではありません。」このように変換できないテキストのメッセージ (「MyColors.DarkGreen」など)。

于 2009-10-01T14:24:36.637 に答える
2

追加の色定義に対するデザイナーのサポートを得るには、おそらく、エディターを拡張または置き換える独自のエディターを作成する必要がありますColor。これらを定義したらEditor、影響を受けるプロパティに属性を適用して、どのプロパティがエディターを使用する必要があるかをデザイナーに伝える必要があります。

と で同様のことを行うことで、ある程度の成功を収めることができる場合もありTypeConverterますTypeConverterAttribute

于 2009-10-01T13:53:36.543 に答える
1

あなたの最善の策は、おそらくデザイナーで何もしようとしないことです。設計時にすべてのフォームをデフォルトの色のままにしておくだけです。

私はあなたの計画に似た計画を持つプロジェクトに参加してきましたが、あらゆる種類の問題が発生しました。デザイナーでボタンが RGB 値に設定されました。同じフォームの別のボタンは、(静的クラスから) コードで設定された色を取得し、2 つの色がわずかに異なっていました。時間が経つにつれて、これらの問題は忍び寄ってきます。

色を変更したい場合は、静的クラスを変更して、すべてのフォームをチェックする必要があります。微妙な違いは明らかではありません。

コードですべての色を設定すると、コントロールを見逃すとすぐにわかります。色を変更する場合は、1 か所だけ変更する必要があります。

私たちが行ったもう 1 つの微調整は、名前に使用法が記載されている静的クラスにメンバーを追加することでした。

例えば:

 public static class MyColors
    {
        public static Color DarkGreen = Color.FromArgb(0, 70, 62);
        ...
        public static Color Orange = Color.FromArgb(239, 132, 16);

        public static Color ButtonBackColor = DarkGreen;
    }

このように、すべてのボタンを DarkGreen から Orange に変更したい場合、1 行の変更のみで済みます。

于 2009-10-01T14:46:37.527 に答える
1

テーマ アプローチを使用しようとしている場合、つまり固定の背景色と前景色のプロパティを持つラベルでコンポーネントを作成し、そのコード ビハインドを次のように変更します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace YourNameSpace
{
    public partial class NameOfStaticColoredLabel : Label
    {
        public NameOfStaticColoredLabel()
        {
            InitializeComponent();
        }

        public NameOfStaticColoredLabel(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        public override Color ForeColor
        {
            get
            {
                return Color.Black;
            }
            set
            {
                base.ForeColor = Color.Black;
            }
        }

        public override Color BackColor
        {
            get
            {
                return Color.Aquamarine;
            }
            set
            {
                base.BackColor = Color.Aquamarine;
            }
        }
    }
}

ご覧のとおり、ラベル コントロールの関連プロパティをオーバーライドするだけです。次に、このラベルをアプリケーション フォームにドラッグ アンド ドロップします。色を変更する必要がある場合は、上記のクラスでそれを行い、アプリを再構築してください。このアプローチでは、静的な色付きのラベルが作成され、デザイナーまたはコードからその色を変更することはできません。

于 2010-11-12T09:58:33.253 に答える
0

これにより、探している結果が得られるはずです。削除できるブラケットの数が多すぎる可能性があります。

public static Color DarkGreen = Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(70)))), ((int)(((byte)(62)))));
于 2009-10-02T15:44:27.607 に答える