Apabila mengezum keluar kawalan pengguna dengan bucu bulat dan berwarna sempadan, sebelah kanan sempadan menjadi tidak kelihatan. Selain itu, berbilang sempadan kuning muncul di sebelah kanan apabila mengezum masuk.
Form1.Designer.cs
trackBar1.Value = 100; BackColor = Color.Gray;
Form1.cs
private void trackBar1_Scroll(object sender, EventArgs e) { UserControl11.SetZoomFactor(trackBar1.Value / 100F); }
UserControl1.cs
// Properties, constructors, and event handlers omitted for brevity internal GraphicsPath GraphicsPathWithBorder; internal void SetZoomFactor(float z) { Width = (int)(MyBaseWidth * z); GraphicsPathWithBorder = RoundedCornerRectangle(ClientRectangle); Region = new Region(GraphicsPathWithBorder); }
Kepada menangani artifak, pengesyoran berikut dibuat:
public partial class RoundControl : UserControl { // Properties, constructors, and event handlers omitted for brevity protected override void OnPaint(PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; RectangleF rect = GraphicsPathWithBorder.GetBounds(); float scaleX = 1 - ((m_PenSize + 1) / rect.Width); float scaleY = 1 - ((m_PenSize + 1) / rect.Height); using (Pen pen = new Pen(m_BorderColor, m_PenSize)) using (Brush brush = new SolidBrush(m_FillColor)) using (Matrix mx = new Matrix(scaleX, 0, 0, scaleY, pen.Width / 2, pen.Width / 2)) { e.Graphics.Transform = mx; e.Graphics.FillPath(brush, GraphicsPathWithBorder); e.Graphics.DrawPath(pen, GraphicsPathWithBorder); } base.OnPaint(e); } }
Coretan kod yang dikemas kini berjaya menghalang artifak visual yang disebabkan oleh jidar berwarna UserControl boleh zum dengan sudut bulat. Rantau yang diubah suai dengan skala terpakai dan matriks terjemah memastikan sempadan anti-alias pada semua peringkat zum.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Artifak Visual dalam Kawalan Pengguna Boleh Zum dengan Sudut Bulat dan Sempadan Berwarna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!