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