[原文链接: http://blog.csdn.net/zgke/article/details/3836712]
因对ListView控件的打印需求,借鉴了原文的思想得以实现,在此向原文作者表示感谢!
1.
通过Control.DrawToBitmap()方法对ListView的当前显示状态截图,存储于PictureBox中
2.
把PictureBox覆盖到ListView上
3.
通过ListView.GetItemRect(ListView.Items.Count - 1,
ItemBoundsPortion.Entire)
获取扩展后不带滚动条的ListViewItem的高度和宽度
4. 根据最后一条ListViewItem的信息重新计算整个ListView的尺寸(应包括绘制到位图后的滚动条信息)
5.
再次通过Control.DrawToBitmap()方法获取ListView的全部形(绘制时应排除灰色滚动条信息)
1 // <summary> 2 /// ListView跨越滚动截图 3 /// </summary> 4 /// <param name="listView">ListView</param> 5 /// <returns>图形</returns> 6 public static Image GetListViewImage(ListView listView) 7 { 8 PictureBox pic = new PictureBox(); 9 pic.Size = listView.Size; 10 pic.Location = listView.Location; 11 Bitmap bmpPre = new Bitmap(pic.Width, pic.Height); 12 listView.DrawToBitmap(bmpPre, new Rectangle(0, 0, pic.Width, pic.Height)); 13 pic.Image = bmpPre; 14 listView.Parent.Controls.Add(pic); 15 16 listView.Visible = false; 17 Size sizePre = listView.Size; 18 19 // 获取扩展后 * 无滚动条 * 情况下最后一条ListViewItem的边框信息 20 // (相对于ListView的左边距、上边距、完全显示的宽度、ListViewItem的高度,不包括滚动条信息) 21 Rectangle rect = listView.GetItemRect(listView.Items.Count - 1, ItemBoundsPortion.Entire); 22 23 // 每条ListViewItem的宽度加 4 (留出右侧灰色滚动条的位置,绘制到位图时会出现灰色滚动条) 24 int width = rect.Width + rect.X + (listView.Columns.Count * 4); 25 if (width > listView.Width) listView.Width = width; 26 27 // 每条ListViewItem的高度加 3 (留出下侧灰色滚动条的位置,绘制到位图时会出现灰色滚动条) 28 int height = rect.Height + rect.Y + (listView.Items.Count * 3); 29 if (height > listView.Height) listView.Height = height; 30 31 // 重绘控件以正确绘制到位图 32 listView.Refresh(); 33 34 // 绘制ListView到位图(不绘制灰色滚动条) 35 Bitmap bmpNew = new Bitmap(width - (listView.Columns.Count * 3), height - (listView.Items.Count * 2)); 36 listView.DrawToBitmap(bmpNew, new Rectangle(0, 0, bmpNew.Width, bmpNew.Height)); 37 38 listView.Size = sizePre; 39 listView.Visible = true; 40 listView.Parent.Controls.Remove(pic); 41 bmpPre.Dispose(); 42 pic.Dispose(); 43 return bmpNew; 44 }
C# 跨越ListView的滚动条截图,布布扣,bubuko.com
原文:http://www.cnblogs.com/tjm-1990/p/3599089.html