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

如果这里的问题是有很长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 回答
0

将有效的颜色名称添加到您的combo-box, 并使用

 Color.FromName();

例子:

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

对于使用有效颜色名称填充组合框,请使用:

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