1

コンボ ボックスから文字列値を入力し、カラー オブジェクトを返す C# でメソッドを作成しようとしています。文字列を比較してカラー オブジェクトを返すために if/else ステートメントを使用してこれを行う方法を確立しましたが、記述しているコードの量を減らしたいと考えていました。

public static ColorBeingReturned(string TextFromBox)
{
   newcolor = Color.TextFromBox;
   return newcolor;
}

コードはすべて間違っていると確信していますが、私が何をしようとしているのかがわかります。以下は、if/else ステートメントで私が持っているもののスニペットです。

public object ColorBeingReturned(string TextFromBox)
{
    if (TextFromBox == "Red")
      return Color.Red;
    else if (TextFromBox == "Blue")
      return Color.Blue;
    else
      return Color.White;
}

基本的に、これらすべての if else ステートメントを記述する必要はなく、いくつかのステートメントを記述したほうがよいので、リストに色を追加すると、移行が簡単になります。

4

3 に答える 3

8

メソッドを使用できますColor.FromName(TextFromBox)

http://msdn.microsoft.com/en-us/library/system.drawing.color.fromname.aspx

リフレクションも使える

public Color ColorBeingReturned(string TextFromBox)
{
    return (Color)(typeof (Color)
                  .GetProperty(TextFromBox,
                       BindingFlags.Static|
                       BindingFlags.Public|
                       BindingFlags.GetProperty))
                  .GetValue(null, null);
}
于 2013-04-08T13:45:08.070 に答える
0

有効な色の名前を に追加してcombo-box使用します

 Color.FromName();

例:

Color red = Color.FromName("Red");  

コンボ ボックスを有効な色名で塗りつぶすには、次を使用します。

 comboBox1.DataSource = Enum.GetValues(typeof(KnownColor));
于 2013-04-08T13:47:12.923 に答える
0

ここでの問題が長いif/elseステートメントである場合は、代わりに辞書を使用することで簡単に解決できます。

var textVsColor = new Dictionary<string,Color>(); 
textVsColor["Red"] = Color.Red;
textVsColor["Green"] = Color.Green;
...

そして、長いのではなくif/elseただの後に

public object ColorBeingReturned(string textFromBox)
{
     var color = dfault(Color);
     textVsColor.TryGetValue(textFromBox, out color); 
     return color;
}

これは、多言語環境をサポートする必要がある場合に、UI の現在の言語に基づいた文字列が必要な場合に適した方法です。

于 2013-04-08T13:47:43.590 に答える