12

Visual Studio では、マークアップ (またはコード ビハインド) でコントロールを作成するときに、"#FFFFFF" のように HEX 形式で色を指定できますが、次のようなプリセット色のリストから選択することもできます: 白、小麦、ウィンドウなど (スクリーンショットを参照)。
そのリストを拡張して色を追加することは可能ですか?
ここに画像の説明を入力

4

6 に答える 6

7

@Sayseが指摘したように、拡張プロパティを作成することはできません:なぜですか? これを読んでください: MSDN ブログ 1 つの方法は、拡張メソッドを作成して使用することです。@Sayse が指摘した @Konrad が KnownColor Enum の問題を指摘した

したがって、ここに少しひねりを加えたソリューションがあります。

Control クラスを継承することで、これが機能するはずです。これにはほとんど手間がかかりませんが、慣れれば非常に簡単です。

  1. Control クラスを継承します。たとえば、MyCustomButton は System.web.UI.WebControls.Button を継承します。
  2. MyColor の New Enum として消費する新しいプロパティ BackColor2 を作成します。
  3. BackColor プロパティをオーバーライドします。BackColor は
    System.Web.Ui.WebControls.WebControlである Button の Parent クラスで定義されます。

  4. BackColor Set プロパティを Private にして BackColor 2 にリンクする

既存の color が必要な場合は、それらを新しい列挙型にコピーします。リフレクターを使用

ここに画像の説明を入力

ここに画像の説明を入力

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;

namespace ClassLibrary1
{
    public class MyButton : System.Web.UI.WebControls.Button
    {

        [DefaultValue(typeof(Color), "")]
        public virtual Color BackColor
        {
            get
            {
                if (!this.ControlStyleCreated)
                    return Color.Empty;
                else
                    return this.ControlStyle.BackColor;
            }
            private set
            {
               // this.ControlStyle.BackColor = value;  , OVerride it with your  MyColor
                this.ControlStyle.BackColor =YourMethodConvertMyColorToColor(this.BackColor2);
            }
        }

        private Color YourMethodConvertMyColorToColor(MyColor c){
            //your implementation 
            if (c == MyColor.MyColorGreen)
            {
                return ColorTranslator.FromHtml("#FF0000"); ; //just example
            }

            return Color.Green;//default
        }

        MyColor _mycolor;  //Global Value

        [DefaultValue(typeof(MyColor), "")]
        public  MyColor BackColor2
        {
            get
            {
                return _mycolor;
            }
            set
            {
                this._mycolor = value;
            }
        }
    }

    public enum MyColor
    {
       MyColorGreen=1,
       MyColorBlue=2
    }
}

編集:System.Drawing.Colorは構造体なので継承できません。これはショーストッパーです。だから私はコントロールを継承することは唯一の解決策だと思った

また、このような拡張メソッドを追加しようとしましたが、うまくいきませんでした。デザイナーで myColor が表示されない

public static class MyExtensions
    {
        public static System.Drawing.Color MyColor(this System.Drawing.Color c)
        {
            return Color.AliceBlue;  // could be your color
        }
    }  
于 2013-04-27T03:40:01.860 に答える
3

独自のコントロールを作成し、Visual Studio のデザイン時のサポートを追加する必要があります。これにより、VS ツールボックスから直接使用できるようになります。迅速な解決策として、このコードを使用してコード ビハインドで色を定義することを検討してください。

using System.Drawing;

this.myButton.BackColor = ColorTranslator.FromHtml("#FF0000");
于 2013-04-27T02:41:15.130 に答える
0

.Net Framework が提供するこのリストを編集して、選択した色を追加することはできません。@Konrad Gadzina による上記の投稿に要約されているように、その理由は非常に明白です。@simplecoder が提案する別の方法を選択できます。

ただし、これらすべての困難な方法を使用するのではなく、色の選択機能を使用して、選択した色を取得することをお勧めします。

于 2013-05-03T18:27:17.887 に答える
0

すでに利用可能なリストからすべての色を含む独自のドロップダウン リストを作成できます。

    Dim colorList as new DropDownList()
    Dim colorArray As String() = System.Enum.GetNames(GetType(KnownColor))
    colorList.DataSource = colorArray 
    colorList.DataBind()

独自の手動カラーをリストに追加できるようになりました。

    colorList.Items.Add(newcolor.ToString)

もちろん、Visual Studio IDE 内で使用するには、独自の Visual Studio アドインを作成する必要があります。

于 2013-05-01T19:48:03.587 に答える