2016-04-12 4 views
1

Код ниже позволит мне проверить два столбца в datagridview для строк в виде цвета (то есть «Красный», «Синий», «Кадет-синий» и т. Д.). Однако, если строка, введенная в сетку данных, не имеет заглавной буквы в начале, она вернет true bool. Как я могу изменить этот код, чтобы слово «синий» или «красный» вернуло ложное значение bool, если строка находится во всех строчных строках или первая буква заглавна?Проверка строк для названий цветов в datagridview

Цвет, введенный в ячейку, должен соответствовать одному из цветов библиотеки 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; 
    } 
+0

В вашей dtagrid всегда будут слова с первой буквой, заглавной буквы? Последняя часть вашего вопроса не имеет смысла; вы либо хотите вернуть false, когда все это в нижнем регистре, либо нет. Если у вас есть первая буква в верхнем регистре, и вы действительно содержите это слово, тогда вы вернете истину. Это верно ? –

+0

Если пользователь вручную вводит значения в datagrid, они могут вводить значение без заглавной буквы первой буквы. Если первая буква находится в верхнем регистре, и она содержит слово, тогда я хотел бы вернуть значение false, так оно и работает. – ziluke

+0

Если я вручную вводю «AColor» вместо «acolor», это плохо? Хорошо, как это отличается от вашего Cadetblue. –

ответ

0

Вы можете сделать что-то подобное для случая нечувствительного сравнения свойств в 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"; 
} 
0

Заменить

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; 
} 
Смежные вопросы