gpt4 book ai didi

c# - 如何捕获控件内的所有项目?

转载 作者:行者123 更新时间:2023-11-30 23:16:46 25 4
gpt4 key购买 nike

假设面板上有一个picturexox并且图片框上有一个datagridview。

我使用以下代码来捕获面板:

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(panel1.ClientRectangle.Width, panel1.ClientRectangle.Height);
panel1.DrawToBitmap(bmp, panel1.ClientRectangle);
bmp.Save(@"test.jpg");

但是好像只抓到了picturebox,上面的datagridview不见了。

如何将图片框与datagridview一起抓取?

最佳答案

DrawToBitmap 方法将捕获在 Paint 事件和所有嵌套控件中绘制的图形。如果缺少一个,则它不会直接或间接嵌套。这可能是这样发生的:

PanelsPictureBoxes 的设计器行为不同

面板,如GroupBoxesTabPages 和其他一些容器控件

这意味着您用鼠标拖到它们上面的任何控件都会嵌套在它们中。

PictureBox 不是容器,比如ButtonLabel..

要在PictureBox嵌套您的DataGridView,您可以选择

  • 键盘 (!) 将它移到那里
  • 将其嵌套在代码中 (yourDGV.Parent = yourPBox1;)

通过移动 PictureBox 以查看 DGV 是否随之移动来测试键盘方式是否成功。

更新:

  • 如果您将 DGV 嵌套在 PictureBox 中,它本身嵌套在 Panel 中,一切都会很好,并且结果将与您所看到的一样。

  • 但是,如果您在 Panel 中嵌套 both DGVPictureBox 并且只让它们overlap,会出现一个奇怪的bug:Multiple overlapping controls are draw in reverse, See here for a post以及关于此问题的链接,即 documented

Controls inside containers are rendered in reverse order.

但显然仍然是一个错误。

关于c# - 如何捕获控件内的所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com