我正在使用Winform DataGridView来显示图像。但是当图像填充单元格时,我没有看到蓝色选择或数量非常少。请参见:
当一个单元格被选中时,我期望使单元格整个透明蓝色,而不仅仅是边或没有被图像占据的边。
目前,我尝试着色蓝色自己在油漆事件,但它更新太频繁,挂起软件。
我也修改图像看起来蓝色在选择改变事件,但它再次放慢软件。
有没有解决这个问题的方法?有没有什么变通办法?而不影响性能?
**EDIT:**这是关于如何在datagridview上显示图像的源代码:
int colms = 4; // total no. of columns in our datagridview
//this create 4 image columns in datagridview
for (int c = 0; c < colms; c++)
{
var imgColm = new DataGridViewImageColumn();
imgColm.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
imgColm.ImageLayout = DataGridViewImageCellLayout.Zoom;
grid.Columns.Add(imgColm);
}
int colm = 0;
int row = 0;
//this get all images and display on datagridview
foreach (var img in Directory.GetFiles(@"C:\Users\Administrator\Desktop\images"))
{
if (colm >= colms)
{
row++;
colm = 0;
grid.Rows.Add();
}
((DataGridViewImageCell)grid.Rows[row].Cells[colm]).Value = Thumb.GetThumbnail(img, ThumbSize.LowRes);
colm++;
}
目前,我使用的单元格绘制只是一个解决方案,that draws border on selected cell。但它的速度慢,当数据很大,其次画在未选定的单元格以及。
1条答案
按热度按时间flseospp1#
以下是两个示例,用于测试所选单元格的性能和填充样式。由于您的代码段没有显示在什么上下文中调用代码,特别是创建图像列部分,为了避免重复不必要的例程,请使用网格设计器添加4个
DataGridViewImageColumn
类型的列,并从那里设置自动调整大小和布局属性。正常模式
在窗体的ctor中,使用
Reflection
启用网格的DoubleBuffered
属性以减少 Flink 。emptyImage
位图是空单元格的空值。覆写
OnLoad
方法以填入方格或呼叫方格的方法。注意,您的
Thumb.GetThumbnail
方法返回一个新图像,因此您需要处理原始图像。实现
CellPainting
事件以绘制除DataGridViewPaintParts.SelectionBackground
之外的所有内容,并使用半透明颜色填充选定的单元格。虚拟模式
这里你需要让数据存储只缓存你需要显示的图像。可见行的每个单元格的图像。为此,创建了
Cache
类来管理相关功能,包括:SetMaxRows
方法来重新计算可见行。Dictionary<int, Image>
中加载、创建和缓存当前可见行图像,其中键是单元格编号。CellValueNeeded
事件时传递请求的图像。最后,
CellPainting
事件几乎保持不变,只是您从cache
示例获取了空图像。