方法,用于输入字符串,输出颜色对象

本文关键字:颜色 对象 输出 输入 用于 方法 字符串 | 更新日期: 2023-09-27 18:07:58

我试图在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语句,我宁愿写几个语句,这样当我给列表添加额外的颜色时,它会更容易过渡

方法,用于输入字符串,输出颜色对象

您可以使用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);
}

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

 Color.FromName();

的例子:

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

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

 comboBox1.DataSource = Enum.GetValues(typeof(KnownColor));

如果这里的问题是有很长的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当前语言的字符串的情况下,这是一种很好的方法。