我需要绘制一些文字及计算结果,显示在一个panel上,显示的结果比较多,所以就想如何只绘制某一部分?例如下面这样:        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("D1= 12mm");
            sb.Append("        ");
            sb.Append("D2= 23mm");
            sb.Append("        ");
            sb.Append("D2= 32mm");
            sb.Append("        \n");
            sb.Append("V1= 33\xb3");            Rectangle displayRectangle =
                    new Rectangle(new Point(20, 20), new Size(500, 500));            // Construct 2 new StringFormat objects
            StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);
            StringFormat format2 = new StringFormat(format1);            // Set the LineAlignment and Alignment properties for
            // both StringFormat objects to different values.
            format1.LineAlignment = StringAlignment.Center;
            format1.Alignment = StringAlignment.Center;            // Draw the bounding rectangle and a string for each
            // StringFormat object.
            e.Graphics.DrawRectangle(Pens.Black, displayRectangle);
            e.Graphics.DrawString(sb.ToString(), this.Font,
                Brushes.Red, (RectangleF)displayRectangle, format1);
        }运行结果:
我如何只重绘最后一个结果?或者选择中间某个结果重绘?关键是结果多的时候,有可能把一些其他显示内容覆盖,重绘后其他的内容不能丢掉,如何实现?  全部重绘当然也能实现,但是多的时候还有点小慢。找到这个字符串的坐标,然后重绘制,但是如果覆盖其他的内容,有重叠的情况下,如何搞?

解决方案 »

  1.   

    如 this.Invalidate(new Rectangle(10, 10, 100, 100));
      

  2.   

    要使用窗体重绘,参考WINDOWS核心编程和Programming Windows
      

  3.   

    重叠不是gdi+的问题,是你需要在设计中实现的东西。
    看这代码,还没有考虑画面超出客户区的显示。
      

  4.   

    楼主想多了。
    我是针对问题发表意见的,楼主水平还是挺不错的。
    提个建议,考虑zorder了吗? 把控制权交给用户可行吗?