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

本文关键字:添加 图像 窗体 windows 事件 DataGridViewImageColoumn | 更新日期: 2023-09-27 18:22:05

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

DataGridViewImageColumn dgColMemos = new DataGridViewImageColumn();

列初始化(我没有包括整个代码):

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

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

将数据存储在一个不允许存储许多项目但提供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个硬编码的图像,您可以添加事件/委派以在单击时调用,添加文本以显示为工具提示等等。