C#中为什么调用对话框后,就找不到原来的图片了(不是静态的图片) 20

我用C#开发了一个简单图形软件,其中涉及到移动图形,所以调用对话框传递参数,可是调用后,先前画的图形就找不到了。... 我用C#开发了一个简单图形软件,其中涉及到移动图形,所以调用对话框传递参数,可是调用后,先前画的图形就找不到了。 展开
 我来答
西森6
2007-04-28 · TA获得超过1552个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:722万
展开全部
您好,

我猜想您应该是使用GDI+在应用程序中进行绘图的吧,并且,您的对话框挡住了曾经的图形的全部或一部分。

如果是,那么这个问题的出现是很正常的,这里涉及了Windows系统的绘图原理:当您打开一个新的窗体时,被这个窗体挡住的部分是不会进行窗体的重新绘制的,也就是说,Windows不管那部分了,当窗体关闭后,被挡住的部分会在窗体的Paint事件处理函数中重新绘制,可是您的图像不会被绘制,这就导致了图像消失的问题。为了重现您的问题,我编写了这样一个小程序,它有两个按钮,当单击按钮2时会在窗体上画一个矩形,单击按钮1则打开一个新窗口,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void ShowLineJoin(PaintEventArgs e)
{

// Create a new pen.
Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);

// Set the pen's width.
skyBluePen.Width = 8.0F;

// Set the LineJoin property.
skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;

// Draw a rectangle.
e.Graphics.DrawRectangle(skyBluePen,
new Rectangle(40, 40, 150, 200));

//Dispose of the pen.
skyBluePen.Dispose();

}

private void Form1_Paint(object sender, PaintEventArgs e)
{
//ShowLineJoin(e);
}

private void button2_Click(object sender, EventArgs e)
{
// Create a new pen.
Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);

// Set the pen's width.
skyBluePen.Width = 8.0F;

// Set the LineJoin property.
skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;

Graphics gra = this.CreateGraphics();

// Draw a rectangle.
gra.DrawRectangle(skyBluePen,
new Rectangle(40, 40, 150, 200));

//Dispose of the pen.
skyBluePen.Dispose();

gra.Dispose();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
if (frm.ShowDialog() == DialogResult.OK)
{ }
}
}
}

这时,当Form2出现并被关闭后,主窗体上的图像也不见了。您可以把Form2的StartPosition设置为CenterScreen,使它在出现时不会挡住主窗体,然后您移动Form2,使它遮挡主窗体上的图像,当它移走后,您会发现原来的图像不见了。

解决的方法是将绘图的代码放到主窗体的Paint事件处理函数中,这样就不会发生图像消失的现象了。

希望这些信息对您有帮助,如果您还有疑问,请补充问题,谢谢!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式