【问题标题】:Method that inputs string outputs color object c#输入字符串的方法输出颜色对象c#
【发布时间】:2013-03-30 15:04:51
【问题描述】:

我试图在 C# 中创建一个从组合框中输入字符串值并返回颜色对象的方法。我已经确定了如何使用 if/else 语句来比较字符串并返回颜色对象,但我想减少我正在编写的代码量。

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

我确定代码完全不正确,但它让您了解我正在尝试做什么。以下是我对 if/else 语句的 sn-p。

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

基本上,不必编写所有这些 if else 语句,我宁愿使用一些语句,这样如果我向列表中添加其他颜色,它会更容易过渡。

【问题讨论】:

  • 用组合框代替文本框怎么样?您可以使用预定义值,代码会很简单。也不允许用户输入错误的数据。
  • return Color.FromName(TextFromBox);
  • 我目前有一个组合框。我只是从组合框中提取文本以计算颜色。
  • 使用System.Drawing.Color枚举作为你的组合框的DataSource怎么样?
  • 我想,颜色是枚举。但事实并非如此,所以我错了:)

标签: c# object methods colors


【解决方案1】:

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

【讨论】:

  • 这很好,除非您不打算将 UI 翻译成其他语言。此时,您需要 UI 上的字符串与基础中的 real 颜色之间的映射。
  • 来自 ILSpy,Color.FromName 在内部使用 Hashtable。使用反射应该慢得多,而且不值得。
  • 是的,我刚刚反编译并看到FromName 与具有类似缓存机制的反射相同。所以,我同意反射似乎没用(:
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

     Color.FromName();
    

    例子:

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

    使用有效颜色名称填充组合框:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2023-04-09
      • 2023-03-30
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多