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);
        }

    }
}

私は新しいので、スクリーンショットをアップロードできません。

4

1 に答える 1

0

いくつかのテストの後、これは、特定の Os/フレームワークでのみ発生するある種のバグのように見えます。

これをなんとか修正したのは、形状を描画する前に次の行を追加することでした:

e.Graphics.ScaleTransform(1, 1);
于 2012-08-31T11:43:27.587 に答える