Visual Studio では、マークアップ (またはコード ビハインド) でコントロールを作成するときに、"#FFFFFF" のように HEX 形式で色を指定できますが、次のようなプリセット色のリストから選択することもできます: 白、小麦、ウィンドウなど (スクリーンショットを参照)。
そのリストを拡張して色を追加することは可能ですか?
6 に答える
@Sayseが指摘したように、拡張プロパティを作成することはできません:なぜですか? これを読んでください: MSDN ブログ 1 つの方法は、拡張メソッドを作成して使用することです。@Sayse が指摘した @Konrad が KnownColor Enum の問題を指摘した
したがって、ここに少しひねりを加えたソリューションがあります。
Control クラスを継承することで、これが機能するはずです。これにはほとんど手間がかかりませんが、慣れれば非常に簡単です。
- Control クラスを継承します。たとえば、MyCustomButton は System.web.UI.WebControls.Button を継承します。
- MyColor の New Enum として消費する新しいプロパティ BackColor2 を作成します。
BackColor プロパティをオーバーライドします。BackColor は
System.Web.Ui.WebControls.WebControlである Button の Parent クラスで定義されます。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
}
}
独自のコントロールを作成し、Visual Studio のデザイン時のサポートを追加する必要があります。これにより、VS ツールボックスから直接使用できるようになります。迅速な解決策として、このコードを使用してコード ビハインドで色を定義することを検討してください。
using System.Drawing;
this.myButton.BackColor = ColorTranslator.FromHtml("#FF0000");
.Net Framework が提供するこのリストを編集して、選択した色を追加することはできません。@Konrad Gadzina による上記の投稿に要約されているように、その理由は非常に明白です。@simplecoder が提案する別の方法を選択できます。
ただし、これらすべての困難な方法を使用するのではなく、色の選択機能を使用して、選択した色を取得することをお勧めします。
すでに利用可能なリストからすべての色を含む独自のドロップダウン リストを作成できます。
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 アドインを作成する必要があります。