如何将多个图像添加到DataGridViewImageColoumn并将事件添加到Windows窗体中的每个图像

时间:2015-11-16 05:42:56

标签: c# image datagridview datagridviewimagecolumn

我需要在three images的图片列中添加多个图片(Data Grid View),但默认图片列不允许我设置多个图片。我需要为每个图像附加一个单独的事件。
由于我是编程新手,请帮助我。谢谢!
以下是我将代码列添加到Data Grid View并初始化image coloumn

的代码
DataGridViewImageColumn dgColMemos = new DataGridViewImageColumn();

列启动(我没有包含整个代码):

this.dgPartslist[sColName, iRowIndex].Value = (Image)Properties.Resources.Memo_Image; 

1 个答案:

答案 0 :(得分:1)

在一个不允许存储多个项目但提供Tag的地方存储数据的最灵活的解决方案是创建一个合适的类:

class ImagesTag
{
    public Image Img1 { get; set; }
    public Image Img2 { get; set; }
    public Image Img3 { get; set; }
    public int CurrentImg { get; set; }

    public ImagesTag(Image i1, Image i2, Image i3)
    { CurrentImg = 0; Img1 = i1; Img2 = i2; Img3 = i3; }
}

现在除了设置图像本身外,您还可以为每个ImageCell's Tag添加一个实例;在这里我设置了3行:

DataGridViewImageColumn dgColMemos = new DataGridViewImageColumn();

dataGridView1.Columns.Add(dgColMemos);
dataGridView1.RowCount = 3;

for (Int16 r = 0; r < dataGridView1.RowCount; r++)
{
    ImagesTag I3 = new ImagesTag(imageList2.Images[r * 3], 
                   imageList2.Images[r * 3 + 1], imageList2.Images[r * 3 + 2]);
    dataGridView1[0, r].Value = I3.Img1;
    dataGridView1[0, r].Tag = I3;
}

请注意,我无法访问资源,但ImageList用于测试。您的设置代码会有很大差异!

我设置第一个Image来显示并将此索引放在类中。这是因为在没有检查像素的情况下很难或甚至不可能找出当前显示的图像。

以下是在MouseClick上旋转三张图片的示例:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
  ImagesTag I3 = (ImagesTag)(dataGridView1[e.ColumnIndex, e.RowIndex].Tag);
  int current = (int)(I3.CurrentImg);
  int next = ++current % 3;
  dataGridView1[0, e.RowIndex].Value = next == 0 ? I3.Img1 : next == 1 ? I3.Img2 : I3.Img3;
  I3.CurrentImg = next;
  dataGridView1[0, e.RowIndex].Tag = I3;
}

当然,您可以自由地根据您的需求调整课程设计;您可以用List<Image>替换3个硬编码图像,可以在单击时添加要调用的事件/代理,添加要显示为工具提示的文本等等。