2012-08-29 25 views
0

我正在使用控件绘画事件在我的应用程序中绘制图形对象。所有对象的大小以毫米为单位存储,因此我使用“毫米”作为图形对象的PageUnit。出于某种原因,当我绘制一个DashStyle而非实体的形状时,它会以非常意想不到的比例绘制。以意想不到的比例绘制的虚线形状

在下面的代码示例中,我希望看到两条线彼此重叠,但我得到的是红色虚线在更大的范围内绘制在其他地方。

任何想法我失踪?

using System; 
using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication6 
{ 
    public partial class Form1 : Form 
    { 
     private Pen solidBlackPen = new Pen(Color.Black, 1); 
     private Pen dashedRedPen = new Pen(Color.Red, 1) { 
              DashStyle = DashStyle.Dash 
             }; 

     private Point point1 = new Point(5, 5); 
     private Point point2 = new Point(35, 5); 

     public Form1() 
     { 
      InitializeComponent(); 

      this.BackColor = Color.White; 
      this.Paint += new PaintEventHandler(Form1_Paint); 
     } 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      e.Graphics.PageUnit = GraphicsUnit.Millimeter; 

      e.Graphics.DrawLine(solidBlackPen, point1, point2); 
      e.Graphics.DrawLine(dashedRedPen, point1, point2); 
     } 

    } 
} 

因为我是新的我不能上传截图。

+1

必须有更多的比什么是你的问题用的,因为如果我执行代码张贴的问题线被绘制在另一个之上。 – pdriegen

+0

我想你是对的。我试图在不同的机器上运行同一个可执行文件,并且在其中一些机器上我得到了我期待的结果。谢天谢地,我设法找到了这个问题的解决方案,但我仍然不知道是什么原因造成的。我只是在别人遇到这个问题时发布一个答案。 – gaz54

回答

0

经过几次测试后,这看起来像是一种只在特定的OS /框架上发生了mybe的bug。

什么设法解决我这是将下面的行绘制形状前:

e.Graphics.ScaleTransform(1, 1);