我的应用程序中有两个Windows窗体。在主窗体上,我单击一个按钮,然后打开一个带有面板的第二个窗口。在面板上的那个表格中,我绘制东西,然后将其阅读到一个图片框中。
这是我主要表格的编码。
if(True)
这就是我绘制第二张表格的方式。
- name: archive logs in zip
archive:
path: "{{ item[1]|map(attribute='path')|list }}"
dest: "/app/logs/{{ item[0] }}.zip"
format: zip
loop: "{{ grouped }}"
vars:
grouped: "{{ files_list|groupby('name') }}"
在第二种形式中,我将面板上的内容读到bmp,然后单击按钮将其传递给该形式。这段代码几乎可以正常工作,除了它只通过面板而不是通过面板上的内容。如果我在绘制的面板上放置了另外两个彩色的图片框控件,则显示的图像将与这些彩色的图片框一起提供,而不是与我在面板上绘制的图片一起提供。 阅读我在面板上绘制到位图的内容时,我在这里做错了什么?还是应该纠正什么,才能使我在面板上绘制的内容变为位图。
答案 0 :(得分:0)
首先,您可以阅读on MSDN:
在处理完当前Windows消息后,通常不应保留通过
Graphics
方法检索的CreateGraphics
对象,因为用该对象绘制的所有内容都会在下一个{{1 }} 信息。因此,除了使用WM_PAINT
之类的非可视方法外,您无法缓存Graphics
对象以供重用。取而代之的是,您必须每次Graphics.MeasureString
都使用{strong>CreateGraphics
对象,然后在完成使用后调用Graphics
。
(重点是我的)
因此,您不应在表单构造函数中创建Dispose
对象,而应在事件处理程序中动态创建并将其处理。
但是那仍然无法帮助您。尝试将表单移出屏幕并移回,您会发现所有自定义图纸都消失了。这是因为您没有保留它们-它们仅被一次性渲染。
使用Graphics
并直接在其PictureBox
上绘制线条,而不是使用面板。
Bitmap
现在是pnlDraw
,而不是PictureBox
:
Panel