这篇文件,教你怎么一步步的用GDI+手绘一个lable标签页。
自主动手绘制,首先继续控件Control 也可以继续UserControl。个人比较方向于用Control来重绘。
在布局函数中添加如下代码块,紧张用于减少窗体加载闪烁问题,控件背景可以利用透明颜色,当然也可以自定义。直接按照个人喜好修正即可。
base.SetStyle( ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor, true); base.UpdateStyles(); this.BackColor = Color.Transparent;
接下来创建用户在设计时候修正的属性内容,lable ,关键内容即为Text属性,代码如下
#region 公有属性 [Category("Wen"), Description("显示笔墨内容")] public override string Text { get => base.Text; set { base.Text = value; this.Invalidate(); } } #endregion
以上代码块中把稳 this.Invalidate()
此代码在重绘中运用相比拟较多。使控件的全体图面无效并导致重绘控件。
以上内容完成后,关键内容便是,如何绘制一个利用GDI绘制
重写属性 Paint
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即肃清锯齿 g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.CompositingQuality = CompositingQuality.HighQuality; Rectangle rec = this.ClientRectangle; //在此位置绘制自主内容,以上代码紧张用于提高绘制质量 base.OnPaint(e); }
//此段代码块,注明了如何绘制文本 g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), rec, new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.NoWrap) { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Near, Trimming = StringTrimming.EllipsisCharacter });
至此,一个大略的lable控件完成。建议看的小伙伴,不要直接复制代码。一步步熟习,并开始自定义绘制内容。并理解其意思,文中不贴完全代码。希望小伙伴,一步步的操作。不要心急。
关注文林软控,后续带大家一起重绘美化C#控件。