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