(八十)c#Winform自定义控件-分割线标签-HZHControls
官网
前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492 
来都来了,点个【推荐】再走吧,谢谢
NuGet
Install-Package HZH_Controls
目录
https://www.cnblogs.com/bfyx/p/11364884.html
用处及效果

准备工作
这个比较简单,对label扩展,重绘划线即可
开始
添加一个类UCSplitLabel ,继承 Label
代码比较少
// ***********************************************************************
// Assembly : HZH_Controls
// Created : 2019-10-09
//
// ***********************************************************************
// <copyright file="UCSplitLabel.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel; namespace HZH_Controls.Controls
{
/// <summary>
/// Class UCSplitLabel.
/// Implements the <see cref="System.Windows.Forms.Label" />
/// </summary>
/// <seealso cref="System.Windows.Forms.Label" />
public class UCSplitLabel : Label
{
/// <summary>
/// Gets or sets the text.
/// </summary>
/// <value>The text.</value>
[Localizable(true)]
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
ResetMaxSize();
}
}
/// <summary>
/// 获取或设置控件显示的文字的字体。
/// </summary>
/// <value>The font.</value>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
/// <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
[Localizable(true)]
public override Font Font
{
get
{
return base.Font;
}
set
{
base.Font = value;
ResetMaxSize();
}
}
/// <summary>
/// 获取或设置大小,该大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的下限。
/// </summary>
/// <value>The minimum size.</value>
[Localizable(true)]
public override Size MinimumSize
{
get
{
return base.MinimumSize;
}
set
{
base.MinimumSize = value;
ResetMaxSize();
}
} /// <summary>
/// 获取或设置大小,该大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的上限。
/// </summary>
/// <value>The maximum size.</value>
[Localizable(true)]
public override Size MaximumSize
{
get
{
return base.MaximumSize;
}
set
{
base.MaximumSize = value;
ResetMaxSize();
}
}
/// <summary>
/// 获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。
/// </summary>
/// <value><c>true</c> if [automatic size]; otherwise, <c>false</c>.</value>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
/// <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
} /// <summary>
/// The line color
/// </summary>
private Color lineColor = LineColors.Light; /// <summary>
/// Gets or sets the color of the line.
/// </summary>
/// <value>The color of the line.</value>
public Color LineColor
{
get { return lineColor; }
set
{
lineColor = value;
Invalidate();
}
} /// <summary>
/// Resets the maximum size.
/// </summary>
private void ResetMaxSize()
{
using (var g = this.CreateGraphics())
{
var _width = Width;
var size = g.MeasureString(string.IsNullOrEmpty(Text) ? "A" : Text, Font);
if (MinimumSize.Height != (int)size.Height)
MinimumSize = new Size(base.MinimumSize.Width, (int)size.Height);
if (MaximumSize.Height != (int)size.Height)
MaximumSize = new Size(base.MaximumSize.Width, (int)size.Height);
this.Width = _width;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UCSplitLabel"/> class.
/// </summary>
public UCSplitLabel()
: base()
{
if (ControlHelper.IsDesignMode())
{
Text = "分割线";
Font = new Font("微软雅黑", 8f);
}
this.AutoSize = false;
Padding = new Padding(, , , );
MinimumSize = new System.Drawing.Size(, );
PaddingChanged += UCSplitLabel_PaddingChanged;
this.Width = ;
} /// <summary>
/// Handles the PaddingChanged event of the UCSplitLabel control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
void UCSplitLabel_PaddingChanged(object sender, EventArgs e)
{
if (Padding.Left < )
{
Padding = new Padding(, Padding.Top, Padding.Right, Padding.Bottom);
}
} /// <summary>
/// Handles the <see cref="E:Paint" /> event.
/// </summary>
/// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" />。</param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var g = e.Graphics;
g.SetGDIHigh(); var size = g.MeasureString(Text, Font);
g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / ), new PointF(Padding.Left - , Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / ));
g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(Padding.Left + size.Width + , Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / ), new PointF(Width - Padding.Right, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / )); }
}
}
最后的话
如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧
(八十)c#Winform自定义控件-分割线标签-HZHControls的更多相关文章
- (八)c#Winform自定义控件-分割线
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- (十八)c#Winform自定义控件-提示框
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- (四十八)c#Winform自定义控件-下拉按钮
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- (三十八)c#Winform自定义控件-圆形进度条-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- (二十八)c#Winform自定义控件-文本框(一)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- (五十八)c#Winform自定义控件-管道阀门(工业)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- (六十八)c#Winform自定义控件-DEMO整理
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- (七十八)c#Winform自定义控件-倒影组件
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- (八十一)c#Winform自定义控件-时间轴-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
随机推荐
- python_tornado
1.创建Tornado服务器 1.创建Application对象 Application是Torando最核心的类 所有关于服务器的配置信息都写在Applicatio ...
- WSGI到底是什么?
在用Python Web开发时经常会遇到WSGI,所以WSGI到底是什么呢?本文我们一起来揭开WSGI神秘的面纱! 先来看一下WSGI的介绍: 全称Python Web Server Gateway ...
- FF.PyAdmin 接口服务/后台管理微框架 (Flask+LayUI)
源码(有兴趣的朋友请Star一下) github: https://github.com/fufuok/FF.PyAdmin gitee: https://gitee.com/fufuok/FF.Py ...
- React、React Native面试题
1.React Native相对于原生的ios和Android有哪些优势. react native一套代码可以开发出跨平台app, 减少了人力.节省了时间.避免了 iOS 与 Android 版本发 ...
- HDU4918 Query on the subtree 点分治+树状数组
bobo has a tree, whose vertices are conveniently labeled by 1,2,…,n. At the very begining, the i-th ...
- 2017 CCPC秦皇岛 H题 Prime set
Given an array of integers , we say a set is a prime set of the given array, if and is prime. Ba ...
- HDU-1698-----Just Hook
In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...
- ARTS-S Why do India and Pakistan keep fighting over Kashmir?
原文 On Wednesday, Pakistani and Indian fighter jets engaged in a skirmish over Indian-controlled terr ...
- 适用于带fifo接口的存储器和显示器测试模块封装 挑战cb
cb说完美是没有极限的,对此我表示赞同,自从用了cb的板子,玩开cmos,fpga,sdram,vga等. 不断涌现的是,双端口sdram,四端口sdram,各式各样的封装,但是大同小异,但总是有些不 ...
- 浅析Java堆,栈,方法区
栈(Stack) 1.栈是线程私有的,其生命周期和线程相同. 2.每个方法在执行的时候都会开辟一个栈区,同时创建一个栈帧(Stack Frame). 3.栈帧用于存储局部变量表,操作数栈,动态链接和方 ...