C# 如何在控件上绘制以使绘制不受影响';你不会消失吗?
我想在PictureBox中显示图形文件,我有:C# 如何在控件上绘制以使绘制不受影响';你不会消失吗?,c#,winforms,image,controls,picturebox,C#,Winforms,Image,Controls,Picturebox,我想在PictureBox中显示图形文件,我有: private void btnLoad_Click(object sender, EventArgs e) { if (dgOpenFile.ShowDialog() == DialogResult.OK) { Bitmap img = new Bitmap(dgOpenFile.FileName); picture.Width = img.Height; picture.Heig
private void btnLoad_Click(object sender, EventArgs e)
{
if (dgOpenFile.ShowDialog() == DialogResult.OK)
{
Bitmap img = new Bitmap(dgOpenFile.FileName);
picture.Width = img.Height;
picture.Height = img.Height;
g.DrawImage(img, 0f, 0f);
}
}
那是g
private void Form1_Load(object sender, EventArgs e)
{
g = picture.CreateGraphics();
}
但是当我把表格移到窗外时,我的照片就消失了。如何防止这种情况发生?您应该在控件的
OnPaint
事件中执行任何自定义绘图,以使其持久化。这会导致每次绘制控件时都重新绘制图形
但是,在这种情况下,使用图片框会更容易:
picture.Image = img;
Windows使用“按需绘制”原则 因此,当它向控件发送WM_PAINT消息时,将调用OnPaint()。您应该准备好(再次)在重写的OnPaint()或Paint事件处理程序中绘制图像
但是一个图片盒可以帮你完成所有这些 为什么不把图片分配给PictureBox(
Image
-Property)?g
到底从哪里来?看起来很不对。g
是你的问题。取而代之的是从OnPaint
方法中获取实例。将WM_PAIN更改为WM_PAINT,这是弗洛伊德的失误(如果有的话)!