日期:2014-05-18  浏览次数:20982 次

C# winform 定时绘制图 出现问题。
目的是每隔一段时间,从新绘制下,怎么一直包参数错误, OnPaint里面绘制没有问题,我用定时绘制,怎么包错。 谢谢大虾帮忙看下。 要做的效果就是移动文字和图片(所以继承了PictureBox,其实用Panle,Control都可以的,)。这里先做个文字的测试。 因为要移动的大小可是0.2,这样。开始我只是改变控件的位置,可是那个最小的是1,在移动的时候一点不连续,明显能看出的。 所以自己绘制一下。

代码如下:

C# code

public class DrawStringControl : PictureBox
    {
        float moveSize = 0.5F;
        float CurrentPost = -10F;
        private Graphics g;//
        public DrawStringControl()
        {
            timer1 = new Timer();
            timer1.Interval = Interval;
            timer1.Tick +=new EventHandler(timer1_Tick);
        }
        private Timer timer1;
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            g = pe.Graphics;
            PointF p = new PointF(CurrentPost,0F);//
            g.DrawString(Value, new Font("宋体", 15), Brushes.Red, p);
        }
        /// <summary>
        /// 开始滚动
        /// </summary>
        public void Start()
        {           
            timer1.Start();
        }

        public void Stop()
        {
            timer1.Stop();
        }

     
        /// <summary>
        /// 向上移动的大小
        /// </summary>
        public float MoveSize
        {
            get { return moveSize; }
            set { moveSize = value; }
        }

        private int interval = 10;
        /// <summary>
        /// 多长时间移动一次
        /// </summary>
        public int Interval
        {
            get { return interval; }
            set { interval = value; }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            CurrentPost -= moveSize;        
            PointF p = new PointF(CurrentPost, 0F);//左移动
            g.DrawString(Value, new Font("宋体", 12), Brushes.Red, p);
        }

        private string value;
       /// <summary>
       /// 要画的文本
       /// </summary>
        public string Value
        {
            get { return this.value; }
            set
            {
                this.value = value;
            }
        }
       
    }



------解决方案--------------------
Control.Invalidate(.);。。。。