返回首页

你好每一个
我米新CreateGraphics主题。我有一个简单的图形应用程序,在那里我画了一个在窗口点击鼠标线在2个不同的点。线绘制在窗口。但我的问题是,当我切换到其他窗口列印回来我的项目窗口被清除。我以前的画线,将不存在
因此,如果有任何建议,请让我知道。我的代码是这样

public Form1()

        {

            InitializeComponent();

        }

        Point[] pts;

        int pointcount = 0;

        private void Form1_MouseClick(object sender, MouseEventArgs e)

        {

            if (pointcount == 0)

                pts = new Point[2];

 

            if (e.Button == MouseButtons.Left)

            {

                if (pointcount != 2)

                {

                    pts[pointcount].X = e.X;

                    pts[pointcount].Y = e.Y;

                    ++pointcount;

                }

                else

                    pointcount = 0;

 

                if (pointcount == 2)

                {

                    ghx.DrawCurve(Pens.Black, pts);

                    pointcount = 0;

                }

 



            }

        }

        Graphics ghx;

        private void Form1_Load(object sender, EventArgs e)

        {

            ghx = CreateGraphics();

        }

回答

评论会员:菲利普森喜朗 时间:2012/02/04
你必须要能够在Paint事件重绘您的图形。因此通常情况下,你将存储在一个容器线(进度线的信息)。

]
评论会员:SAKryukov 时间:2012/02/04
当然!表格不持有图形;这是一个很好的理由。的形式呈现,它的每一次部分是无效的,这恰好形式的一部分时,当它被掩盖了其他一些窗口,后来证明。

你需要处理的的事件Form.Paint或重写它的方法Form.OnPaint。例如,放置在窗体的构造这样的代码:

{C}
作为一个经验法则,你不应该创建一个System.Drawing.Graphics实例,使用事件参数参数传递给你一个。

现在,要改变所呈现的图形(动画,任何一种互动行为,如在游戏或绘图应用程序)根据一些数据结构渲染方法(上面显示为匿名方法);,使这个数据结构的字段()您的表单。当您更改数据,渲染会改变,但如何触发重新绘制?你需要触发发送消息WM_PAINT消息的形式。
这是通过调用Form.Invalidate(继承从Control.Invalidate。可以提高性能,使用参数(矩形或地区)的Invalidate只是一些场景的一部分无效。
mdash; SA