DataGridViewImageColumn
如果图像单元格的值为绿色复选框图像,我已经创建并想要执行操作。代码如下。但它不在条件内
if (dgvException.Rows[e.RowIndex].Cells["colStock"].Value
== Properties.Resources.msQuestion)
{
//Some code
}
请帮忙。
DataGridViewImageColumn
如果图像单元格的值为绿色复选框图像,我已经创建并想要执行操作。代码如下。但它不在条件内
if (dgvException.Rows[e.RowIndex].Cells["colStock"].Value
== Properties.Resources.msQuestion)
{
//Some code
}
请帮忙。
我建议使用单元格标记属性添加代表图像的文本值 - 例如数字或名称,并使用它来检查显示的图像。.
使用相等运算符 ( ) 检查图像的相等性==
并不能按照您需要的方式工作。这就是为什么你的平等检查总是返回假。
您需要确定两个图像的内容是否相同——为此,您需要逐像素检查 DGV 单元中的图像和参考图像。我找到了一些指向这篇文章的链接,这些链接演示了比较两个图像。我从文章中提取了图像比较算法,并将其浓缩为一个方法,该方法将两个Bitmaps
作为参数进行比较,如果图像相同则返回 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
}
S.Ponsford 的回答对我来说效果很好,我做了这个通用的例子。PD:请记住我的第 0 列是我的 DataGridViewImageColumn
if (this.dataGridView.CurrentRow.Cells[0].Tag == null)
{
this.dataGridView.CurrentRow.Cells[0].Value= Resource.MyResource1;
this.dataGridView.CurrentRow.Cells[0].Tag = true;
}
else
{
this.dataGridView.CurrentRow.Cells[0].Value = Resources.MyResource2;
this.dataGridView.CurrentRow.Cells[0].Tag = null;
}