当第一次运行form时,我从数据库里读取画线的记录,然后在picturebox里的paint进行重画时,为什么只是闪了一下就没了?

解决方案 »

  1.   

    你如何在paint中做的,至于其他地方是否操作了picturebox。
      

  2.   

    sorry,瞎说了
    AutoRedraw是VB6的picturebox的属性,.NET里没有了
      

  3.   

    下面是我的代码,被这个问题搞了好久了,看了很多资料,自己都解决不了,惭愧
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    using System.Data.OleDb;namespace NSVstandard
    {
        public partial class frmDraw : Form
        {
            Rectangle SelectRect = new Rectangle();
            Point ps = new Point();
            Point pe = new Point();
            OleDbConnection MyConn;        string strType = "Line";        public frmDraw()
            {
                InitializeComponent();
            }        private void frmDraw_Load(object sender, EventArgs e)
            {        }
            private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                SelectRect.Width = 0;
                SelectRect.Height = 0;
                SelectRect.X = e.X;
                SelectRect.Y = e.Y;            ps.X = e.X;
                ps.Y = e.Y;
                pe = ps;
            }        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    switch (strType)
                    {
                        case "Line":
                            ControlPaint.DrawReversibleLine(this.pictureBox1.PointToScreen(ps), this.pictureBox1.PointToScreen(pe), Color.Black);
                            pe = new Point(e.X, e.Y);
                            ControlPaint.DrawReversibleLine(this.pictureBox1.PointToScreen(ps), this.pictureBox1.PointToScreen(pe), Color.Black);
                            break;
                        case "Rect":
                            ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                            SelectRect.Width = e.X - SelectRect.X;
                            SelectRect.Height = e.Y - SelectRect.Y;
                            ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                            break;
                        case "Ellipse":
                            ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                            SelectRect.Width = e.X - SelectRect.X;
                            SelectRect.Height = e.Y - SelectRect.Y;
                            ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                            break;                }
                }
            }        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
            {
                Graphics g = this.pictureBox1.CreateGraphics();
                Pen p = new Pen(Color.Red, 1);
                SolidBrush brushBlue = new SolidBrush(Color.Blue);
                switch (strType)
                {
                    case "Line":
                        ControlPaint.DrawReversibleLine(this.pictureBox1.PointToScreen(ps), this.pictureBox1.PointToScreen(pe), Color.Black);
                        g.DrawLine(p, ps, pe);
                        break;
                    case "Rect":
                        ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                        g.DrawRectangle(p, SelectRect);
                        break;
                    case "Ellipse":
                        ControlPaint.DrawReversibleFrame(this.pictureBox1.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);
                        g.DrawEllipse(p, SelectRect);
                        g.FillEllipse(brushBlue, SelectRect);
                        break;
                }
                g.Dispose();
            }        private void button1_Click(object sender, EventArgs e)
            {
                strType = "Line";
            }        private void button2_Click(object sender, EventArgs e)
            {
                strType = "Rect";
            }        private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                string[] sArray;
                Graphics g = this.pictureBox1.CreateGraphics();
                //try
                //{
                //create a connection string to the access database
                MyConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;User Id=;Password=;Data Source=" + Program.ObserveDB);
                MyConn.Open();
                //dAdapter = new OleDbDataAdapter("SELECT * FROM observe ORDER BY ID", MyConn);
                //dSet = new DataSet();
                //dAdapter.Fill(dSet, table);
                OleDbCommand MyCommand = new OleDbCommand("SELECT * FROM observe WHERE CODE = 4", MyConn);
                OleDbDataReader MyDataReader = MyCommand.ExecuteReader(CommandBehavior.CloseConnection);
                string strNum;
                while (MyDataReader.Read())
                {
                    for (int i = 1; i < 50; i++)
                    {
                        if (i < 10)
                        {
                            strNum = "0" + i.ToString();
                        }
                        else
                        {
                            strNum = i.ToString();
                        }                    if (MyDataReader["PROC" + strNum].ToString() != "")
                        {
                            sArray = MyDataReader["PROC" + strNum].ToString().Split(',');
                            if (sArray[1].ToString() == "0")
                                g.DrawLine(new Pen(Color.Red), Int16.Parse(sArray[2]), Int16.Parse(sArray[3]), Int16.Parse(sArray[4]), Int16.Parse(sArray[5]));
                        }
                    }
                }
                MyConn.Close();
                //}
                //catch (Exception ex)
                //{
                //    MessageBox.Show("Error : " + ex.Message);
                //    //connectection failed
                //}
            }        private void button3_Click(object sender, EventArgs e)
            {
                strType = "Ellipse";
            }
        }
    }
      

  4.   

    CHANGE
    Graphics g = this.pictureBox1.CreateGraphics();withGraphics g = e.Graphics;
      

  5.   

    关注一下。上次面试。有个CIO问过Paint的一些东西====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2