1

次のコードを使用して、マウスポイント(開始点と終了点)に従って楕円を描画しようとしています...

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    start = new Point(e.X, e.Y);
    // Point mouseDownLocation = pictureBox1.PointToClient(new Point(e.X, e.Y))
    mRect = new Rectangle(e.X, e.Y, 0, 0);
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    end = new Point(e.X, e.Y);

    pictureBox1.Invalidate();

    if (listRect.Count <= 4)
    {
        listRect.Add(mRect);
        this.getObjectPopup(e);
    }
    else
    {
        MessageBox.Show("Maximum 5 selection per Image", "Alert", MessageBoxButtons.OK);
    }
}

そしてペイントイベントで次のコードを書きました

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Color c1 = Color.FromArgb(50, Color.Green);
    foreach (Rectangle rect in listRect)
    {
        using (Pen pen = new Pen(Color.Red, 2))
        {
            float angle = (float)Angle(start, end);

            Matrix transformMatrix = new Matrix();
            transformMatrix.Translate(200.0F, 0.0F);
            e.Graphics.RotateTransform(angle);
            // e.Graphics.MultiplyTransform(transformMatrix, MatrixOrder.Append);
            e.Graphics.DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height);

            e.Graphics.FillEllipse(new SolidBrush(c1), rect.X, rect.Y, rect.Width, rect.Height);
            this.WriteText(e,rect);  
        }
    }           
}

楕円が描画されましたが、マウスの始点と終点と一緒ではありません

4

1 に答える 1

1

水平方向と垂直方向の配置を設定しようとしましたか?

rect.HorizontalAlignment = HorizontalAlignment.Left;
rect.VerticalAlignment = VerticalAlignment.Top;

編集: Ellipse でこれらのプロパティをそれぞれ設定する

于 2013-02-18T11:09:17.717 に答える