2016-04-12 14 views
1

以下のコードでは、datagridview内の2つの列を色の形の文字列(つまり、「赤」、「青」、「Cadetblue」など)でチェックできます。ただし、データグリッドに入力された文字列の先頭に大文字の文字が含まれていない場合、真のboolが返されます。文字列がすべて小文字であるか、最初の文字が大文字である場合、 "blue"または "red"という単語が誤ったboolを返すようにこのコードを変更するにはどうすればよいですか?DataGridviewの色名の文字列を確認する

セルに入力された色は、C#ライブラリの色と一致する必要があります。そうでない場合は、false boolが返されます。ユーザーが簡単に値を作成する方法はありますが、手動で行うことを選択したユーザーに対してこのチェックを実行したいと思います。

あなたがSystem.Drawing.Colorのプロパティの大文字小文字を区別しない比較のために、このような何かを行うことができ
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を返すかのどちらかです。最初の文字が大文字で、その単語が含まれている場合はtrueを返します。あれは正しいですか ? –

+0

ユーザーが手動で値をデータグリッドに入力すると、最初の文字を大文字にしないで値を入力できます。最初の文字が大文字で、それに単語が含まれている場合、私はfalseを返したいと思います。それは現在働いている方法です。 – ziluke

+0

"acolor"の代わりに手動で "AColor"を入力すると、それは悪いですか?あなたがCadetblueとどう違うのですか? –

答えて

0

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; 
} 
関連する問題