【问题标题】:Checking strings for color names in datagridview在 datagridview 中检查颜色名称的字符串
【发布时间】:2016-04-12 02:33:21
【问题描述】:

下面的代码将允许我检查 datagridview 中的两列以获取颜色形式的字符串(即“Red”、“Blue”、“Cadetblue”等...)。但是,如果在数据网格中输入的字符串开头没有大写字母,它将返回一个真正的布尔值。如果字符串全部为小写或首字母大写,如何修改此代码,以便单词“blue”或“red”返回 false bool?

输入到单元格中的颜色需要匹配 C# 库颜色之一,否则将返回 false bool。我确实有一种方法让用户以一种简单的方式输入创建值,但我想为选择手动执行此操作的用户运行此检查。

public static bool CheckForColorsInColorsColumns(DataGridView datagridviewname)
    {
        bool colorsarenotpresent = false;
        for (int i = 0; i < datagridviewname.Rows.Count; i++)
        {
            var value = datagridviewname.Rows[i].Cells[4].Value.ToString();
            var value2 = datagridviewname.Rows[i].Cells[5].Value.ToString();

            List<string> colors = new List<string>();
            foreach (PropertyInfo prop in typeof(Color).GetProperties())
            {
                if (prop.PropertyType.FullName == "System.Drawing.Color")
                    if (prop.Name != "Transparent")
                    {
                        colors.Add(prop.Name);
                    }
            }

            if (!colors.Contains(value) || !colors.Contains(value2))
            {
                colorsarenotpresent = true;
                break;
            }

        }
        return colorsarenotpresent;
    }

【问题讨论】:

  • 在你的 dtagrid 中,总是会有首字母大写的单词?你问题的最后一部分没有意义;您要么想在全部小写时返回false,要么不返回。如果您将第一个字母大写并且确实包含该单词,则返回 true。对吗?
  • 如果用户在数据网格中手动输入值,他们可能会输入一个值而不用大写第一个字母。如果第一个字母是大写的并且包含单词,那么我想返回 false,这就是它当前的工作方式。
  • 如果我手动输入“AColor”而不是“acolor”,这很糟糕吗?好吧,那和你的 Cadetblue 有什么不同
  • 如果你手动输入“黑色”,那没关系。如果您手动输入“黑色”,它现在不起作用。
  • 所以你是说“黑色”应该和“黑色”一样工作?您想要不区分大小写的比较?

标签: c# colors


【解决方案1】:

替换

if (!colors.Contains(value) || !colors.Contains(value2))
{
    colorsarenotpresent = true;
    break;
}

if (!colors.Any(c=>
    c.Equals(value,InvariantCultureIgnoreCase) || 
    c.Equals(value2,InvariantCultureIgnoreCase))
{
    colorsarenotpresent = true;
    break;
}

【讨论】:

    【解决方案2】:

    您可以对 System.Drawing.Color 中的属性进行不区分大小写的比较:

    typeof(System.Drawing.Color).GetProperties().Any(
        (pi) => string.Compare(pi.Name, "black", true) == 0)
    

    或者,如果您想处理所有 KnownColors,您可以执行以下操作:

    public static bool IsColor(string col)
    {
        System.Drawing.KnownColor nc;
        Enum.TryParse(col, true, out nc);
        var returnColor = System.Drawing.Color.FromKnownColor(nc);
        return returnColor.Name != "0";
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 1970-01-01
      • 2013-08-27
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多