1

マウスイベントについて簡単な質問があります。

私は WinForms アプリケーションを使用しており、GDI+ グラフィックス オブジェクトを使用して単純な形状である円を描画しました。

ここでやりたいことは、この図形をマウスでドラッグすることです。

したがって、ユーザーがマウスを動かしているときに、左ボタンがまだ押されているときに、オブジェクトを移動したいと考えています。

私の質問は、ユーザーがまだマウスの左ボタンを押しているかどうかを検出する方法です。winforms には onDrag イベントがないことを知っています。何か案は?

4

1 に答える 1

1

この非常に単純化された例を確認してください。GDI +描画の多くの側面をカバーしていませんが、winformsでマウスイベントを処理する方法についてのアイデアを提供します。

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsExamples
{
    public partial class DragCircle : Form
    {


        private bool bDrawCircle;
        private int circleX;
        private int circleY;
        private int circleR = 50;

        public DragCircle()
        {
            InitializeComponent();
        }

        private void InvalidateCircleRect()
        {
            this.Invalidate(new Rectangle(circleX, circleY, circleR + 1, circleR + 1));
        }

        private void DragCircle_MouseDown(object sender, MouseEventArgs e)
        {
            circleX = e.X;
            circleY = e.Y;
            bDrawCircle = true;
            this.Capture = true;
            this.InvalidateCircleRect();
        }

        private void DragCircle_MouseUp(object sender, MouseEventArgs e)
        {
            bDrawCircle = false;
            this.Capture = false;
            this.InvalidateCircleRect();
        }

        private void DragCircle_MouseMove(object sender, MouseEventArgs e)
        {

            if (bDrawCircle)
            {
                this.InvalidateCircleRect(); //Invalidate region that was occupied by circle before move
                circleX = e.X;
                circleY = e.Y;
                this.InvalidateCircleRect(); //Add to invalidate region the rectangle that circle will occupy after move.
            }
        }

        private void DragCircle_Paint(object sender, PaintEventArgs e)
        {
            if (bDrawCircle)
            {
                e.Graphics.DrawEllipse(new Pen(Color.Red), circleX, circleY, circleR, circleR);
            }
        }


    }
}
于 2013-02-27T12:40:46.557 に答える