ビジュアルスタジオでは、マークアップ(またはコードビハインド)でコントロールを作成するときに、色を "#FFFFFF"のようなHEX形式で指定できますが、白、小麦、窓などのプリセット色のリスト(スクリーンショットを参照)。
このリストを拡張して色を追加することはできますか?
System.Drawings.Colorにカラーオプションを追加する
答えて
拡張プロパティを作成することはできません。
一つの解決策は、2つの色の代わりに、既存のようなものを作成しているので、これは、次に (new Color()).MyNewColor()
から多少異なる、おそらくより少なく効率的に呼び出すことができ、拡張方法
public static Color MyNewColor(this Color str)
{
return Color.FromArgb(255, 255, 255, 255);
}
を作ることですあなたが探しているものを達成するでしょう。
このリストはSystem.Drawing.KnownColor
のenum値に基づいています。列挙型cannot be extendedとあなたがcannot inherit from another enumの場合、独自のコードで使用する名前付き色でリストを作成するには、手動で追加した値と表示する追加の値で独自の列挙型を実装する必要があります。
System.Drawing.KnownColor
enumには、Color
構造体のメソッドがあり、この名前付きカラーの値を取得するために使用されます - Color.FromKnownColor
です。私は構造体にも、FromKnownColor
メソッドがKnownColor
enumの場合と同じように、独自の列挙型に対して同じ処理を行うような拡張メソッドを追加する必要があると思います。そして、あなた自身の拡張メソッドでFromKnownColor
メソッドを使用して、この標準列挙型に既に存在する色を単純化することもできます。
ただし、ASP.NETデザイナーでこの1つのリストを拡張するだけであれば、自分のプロジェクトの変更やVSのオプションを変更することでこれを行うことはできません。たぶん、Visual Studioにアドインを書き込んでこれを行うこともできますが、これが唯一の方法です。
EDIT:コントロールを継承することはあなたのためのオプションである場合は、多分あなたが得ることができる最高の答えはdescribed in his answerとして、 simplecoder によって提案されたものです - この新しい列挙型を持つ古いものをもとに、独自のコントロールを作成します新しい色を使用するプロパティにバインドされた値。
独自のコントロールを作成し、Visual Studioのデザインタイムサポートを追加する必要があります。これにより、VS Toolboxから直接使用することができます。このコードを使用してコード内の色を定義することを検討してください。
using System.Drawing;
this.myButton.BackColor = ColorTranslator.FromHtml("#FF0000");
@Sayseは拡張プロパティを作成できません。なぜですか? MSDN Blog エクステンションメソッドを作成して使用する方法の1つです。 @Sayseが指摘したところ @KonradはKnownColor Enumの問題を指摘しました
ここでは少し歪んだ解決法があります。
Controlクラスを継承することによって、これはうまくいくはずです。これはほとんど仕事を必要としませんが、一度それを掛けてしまえば、それは非常に簡単です。
- 継承コントロールクラスなどのMyCustomButtonはSystem.web.UI.WebControls.Buttonを継承
- MyColorの新しい列挙型としてのBackColorプロパティは、BackColorプロパティを定義した
オーバーライドを消費する新しいプロパティBackColor2を作成
System.Web.Ui.WebControls.WebControlされるボタンの親クラスのプライベートにBackColorプロパティを設定プロパティを作成し、
BackColorプロパティ2にリンク
既存の色が必要な場合は、新しい列挙型をコピーしてください。リフレクター
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
}
}
あなたはすでに利用可能なリストからすべての色を含むリストダウン独自のドロップを作成することができますが表示されません。
Dim colorList as new DropDownList()
Dim colorArray As String() = System.Enum.GetNames(GetType(KnownColor))
colorList.DataSource = colorArray
colorList.DataBind()
これで、独自のマニュアルカラーをリストに追加できます。
colorList.Items.Add(newcolor.ToString)
ofcourse Visual Studio IDEで使用するには、独自のVisual Studioアドインを作成する必要があります。
コンポーネントデザイナークラスではなく、Visual Studioアドインですか? – dekdev
あなたは実際には、選択した色を追加するために.Net Frameworkによって提供されるこのリストを編集することはできません。その理由は、@Konrad Gadzinaの上記記事に要約されているように、非常に明白です。 @simplecoderで提案されているように、別の方法を選択することができます。
しかし、私はむしろ、ピックカラー機能を使用して、あなたの選択の色をつかむことができます。
- 1. wordpressでカラーオプションを追加する方法
- 2. Angular ChartJsカラーオプションが機能しない
- 3. 「追加ボタン」を追加するには?
- 4. 電子商取引アプリでカラーオプションで検索を実装する
- 5. VS.Phpのカラーオプションを取得するにはどうすればよいですか?
- 6. EditTextにアイテムを追加するクロスボタンを追加する方法
- 7. datatablesにhtmlマークアップを追加する行を追加する
- 8. 要素をビューアニメーションに追加するクラス、アニメーションを追加する
- 9. 製品を追加するときにカウンタを追加する
- 10. Cloudant/CouchDBにドキュメントを追加する際にタイムスタンプを追加
- 11. MySQLテーブルにテーブルを追加する追加のカラムを追加しました
- 12. リストに追加するxdocumentのlinqクエリを追加する
- 13. クラスインスタンスを追加するために追加する
- 14. 追加フィールドを追加するブートストラップ
- 15. QTableviewに追加されたボタンにカスタムスタイルを追加する
- 16. Makefileに追加のソースファイルを追加するには
- 17. jQueryで追加のクラスをホバーに追加するには
- 18. アイテムにAJAXアクションを追加する(追加)AJAXによって
- 19. 追加の変数をAjaxのクエリに追加するには
- 20. 動的にスクロールビューにボタンを追加して追加する
- 21. ミュールペイロードに追加データを追加するには?
- 22. 総額に追加料金を追加するには
- 23. SimGrid。 masterworkerモデルに追加のパラメータを追加するには?
- 24. jquery-ui datepickerインスタンスに追加のイベントハンドラを追加するには?
- 25. Eclipseのチーム - >追加コマンドにキーボードショートカットを追加するには
- 26. リストアイテムに追加値を追加するには
- 27. ワークフローに追跡プロファイルを追加する
- 28. グループに参加キーを追加する
- 29. "#"をUrl.Actionに追加する
- 30. element1を文書に追加する前にelement2をelement1に追加する
これはおそらくSystemColorクラスから来ているので、リストを簡単に拡張する方法はありません。 –
@WiktorZychla System COlorは構造体クラスではありません - http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx – dekdev
@WiktorZychla System.Drawing.Colorは構造体であり継承できません – dekdev