2

DataGridViewImageColumn画像セルの値が緑色のチェックボックス画像の場合に操作を実行したいと考えています。コードを以下に示します。しかし、それは条件の中には入りません

if (dgvException.Rows[e.RowIndex].Cells["colStock"].Value 
                                              == Properties.Resources.msQuestion)
{
    //Some code
}

助けてください。

4

3 に答える 3

2

セルの Tag プロパティを使用して、画像を表すテキスト値 (数値や名前など) を追加し、これを使用して表示される画像を確認することをお勧めします。.

于 2015-10-22T15:27:24.843 に答える
1

等式演算子()を使用して画像の等式をチェックして==も、必要な方法で機能しません。そのため、等価性チェックでは常にfalseが返されます。

2つの画像の内容が同じであるかどうかを確認する必要があります。これを行うには、DGVセル内の画像と参照画像のピクセルごとのチェックを行う必要があります。2つの画像の比較を示すこの記事へのリンクをいくつか見つけました。私は記事から画像比較アルゴリズムを採用し、それをBitmapsパラメーターとして比較するために2つを取り、画像が同一である場合にtrueを返すメソッドに凝縮しました。

private static bool CompareImages(Bitmap image1, Bitmap image2) {
    if (image1.Width == image2.Width && image1.Height == image2.Height) {
        for (int i = 0; i < image1.Width; i++) {
            for (int j = 0; j < image1.Height; j++) {
                if (image1.GetPixel(i, j) != image2.GetPixel(i, j)) {
                    return false;
                }
            }
        }
        return true;
    } else {
        return false;
    }
}

(警告:コードはテストされていません)

このメソッドを使用すると、コードは次のようになります。

if (CompareImages((Bitmap)dgvException.Rows[e.RowIndex].Cells["colStock"].Value, Properties.Resources.msQuestion)) {
    //Some code 
} 
于 2012-10-03T06:14:22.603 に答える