ホームページ >バックエンド開発 >C++ >C# ペイント イベントを使用してマウス座標で図形を描画する方法

C# ペイント イベントを使用してマウス座標で図形を描画する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 20:20:43240ブラウズ

How to Draw Shapes at Mouse Coordinates using the C# Paint Event?

ペイント イベントを使用したマウス座標での図形の描画**

C# では、カスタム描画アプリケーションを作成するのが一般的なタスクです。これは通常、コントロールの Paint イベントを処理するか、ユーザー コントロールの OnPaint メソッドをオーバーライドすることによって実現されます。ただし、複数の引数を指定してメソッドを呼び出し、PaintEvent を使用する方法を理解するのは難しい場合があります。この記事では、Paint イベントを使用してマウス座標で図形を描画するプロセスについて説明します。

カスタム描画に PaintEvent を使用する

場合コントロールの表面に描画する場合は、Paint イベントを使用するか、OnPaint をオーバーライドすることが重要です。 Graphics オブジェクトをキャッシュしようとすると、無効な結果が得られます。代わりに、PaintEventArgs によって提供される Graphics オブジェクトを使用してください。複雑な描画要件がある場合は、特殊な描画を実行できるメソッドに Graphics オブジェクトを渡すことを検討してください。

MouseCooperatives を使用した四角形の描画**

マウス座標で図形を描画するには一般的なアプローチは、MouseDown イベントを処理し、形状を表す新しいオブジェクトを作成し、その開始点とその他のプロパティを保存することです。マウスが移動すると、現在の位置を使用して図形のサイズが計算されます。この情報は、ペイント イベントでシェイプをレンダリングするために使用されます。

描画領域のクリア

描画領域をクリアするには、リストからシェイプ オブジェクトを削除します。 (リストを使用してシェイプを保存する場合) コントロールを無効にするか、リストをクリアしてから無効にします。

例実装

次のコード スニペットは、Paint イベントを使用してマウス座標で四角形を描画する方法を示しています。

// Store shape parameters in a DrawingRectangle class
List<DrawingRectangle> drawingRects = new List<DrawingRectangle>();

private class DrawingRectangle
{
    public Rectangle Rect { get; set; }
    public Size Size { get; set; }
    public Point Location { get; set; }
    public Point StartPosition { get; set; }
    public Color DrawingColor { get; set; } = Color.LightGreen;
    public float PenSize { get; set; } = 3f;
}

// Start drawing on MouseDown
private void form1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button != MouseButtons.Left) return;
    DrawingRects.Add(new DrawingRectangle()
    {
        Location = e.Location,
        Size = Size.Empty,
        StartPosition = e.Location,
        Owner = (Control)sender,
        DrawingColor = SelectedColor // Shape's Border Color
    });
}

// Update shape size on MouseMove
private void form1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button != MouseButtons.Left) return;
    var dr = DrawingRects[DrawingRects.Count - 1];
    if (e.Y < dr.StartPosition.Y) { dr.Location = new Point(dr.Rect.Location.X, e.Y); }
    if (e.X < dr.StartPosition.X) { dr.Location = new Point(e.X, dr.Rect.Location.Y); }

    dr.Size = new Size(Math.Abs(dr.StartPosition.X - e.X), Math.Abs(dr.StartPosition.Y - e.Y));
    this.Invalidate();
}

// Draw shapes in the Paint event
private void form1_Paint(object sender, PaintEventArgs e)
{
    DrawShapes(e.Graphics);
}

// Method to draw shapes using Graphics object
private void DrawShapes(Graphics g)
{
    if (DrawingRects.Count == 0) return;
    g.SmoothingMode = SmoothingMode.AntiAlias;
    foreach (var dr in DrawingRects)
    {
        using (Pen pen = new Pen(dr.DrawingColor, dr.PenSize))
        {
            g.DrawRectangle(pen, dr.Rect);
        }
    }
}

この例では、形状座標は DrawingRectangle クラスに格納されています。 MouseDown イベントは新しいシェイプ オブジェクトの作成をトリガーし、後続の MouseMove イベントはそのサイズを動的に調整します。最後に、Paint イベントは Graphics オブジェクトを使用して、コントロールの表面に図形をレンダリングします。

以上がC# ペイント イベントを使用してマウス座標で図形を描画する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。