Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Melukis Bentuk pada Koordinat Tetikus menggunakan Acara C# Paint?

Bagaimana untuk Melukis Bentuk pada Koordinat Tetikus menggunakan Acara C# Paint?

Patricia Arquette
Lepaskan: 2025-01-03 20:20:43
asal
218 orang telah melayarinya

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

Melukis Bentuk pada Koordinat Tetikus menggunakan Acara Cat**

Dalam C#, tugas biasa ialah mencipta aplikasi lukisan tersuai. Ini biasanya dicapai dengan mengendalikan acara Cat Kawalan atau mengatasi kaedah OnPaint dalam Kawalan Pengguna. Walau bagaimanapun, memahami cara memanggil kaedah dengan berbilang argumen dan menggunakan PaintEvent boleh menjadi mencabar. Artikel ini akan membimbing anda melalui proses melukis bentuk pada koordinat tetikus menggunakan acara Cat.

Menggunakan PaintEvent untuk Lukisan Tersuai

Apabila melukis pada permukaan Control, adalah penting untuk menggunakan acara Paint atau mengatasi OnPaint. Percubaan untuk cache objek Grafik akan membawa kepada hasil yang tidak sah. Sebaliknya, gunakan objek Grafik yang disediakan oleh PaintEventArgs. Jika anda mempunyai keperluan lukisan yang kompleks, pertimbangkan untuk menghantar objek Grafik kepada kaedah yang boleh melakukan lukisan khusus.

Melukis Segi Empat dengan Koordinat Tetikus**

Untuk melukis bentuk pada koordinat tetikus , pendekatan biasa ialah mengendalikan acara MouseDown dan mencipta objek baharu yang mewakili bentuk, menyimpan titik permulaannya dan sifat lain. Semasa tetikus bergerak, lokasi semasa digunakan untuk mengira saiz bentuk. Maklumat ini digunakan dalam acara Cat untuk memaparkan bentuk.

Mengosongkan Kawasan Lukisan

Untuk mengosongkan kawasan lukisan, anda boleh sama ada mengalih keluar objek bentuk daripada senarai (jika menggunakan senarai untuk menyimpan bentuk) dan batalkan Kawalan atau kosongkan senarai dan kemudian batalkan.

Contoh Pelaksanaan

Coretan kod berikut menunjukkan cara melukis segi empat tepat pada koordinat tetikus menggunakan acara Cat:

// 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);
        }
    }
}
Salin selepas log masuk

Dalam contoh ini, koordinat bentuk disimpan dalam kelas DrawingRectangle. Peristiwa MouseDown mencetuskan penciptaan objek bentuk baharu dan peristiwa MouseMove seterusnya melaraskan saiznya secara dinamik. Akhir sekali, acara Cat menggunakan objek Grafik untuk menghasilkan bentuk pada permukaan Kawalan.

Atas ialah kandungan terperinci Bagaimana untuk Melukis Bentuk pada Koordinat Tetikus menggunakan Acara C# Paint?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan