zoukankan      html  css  js  c++  java
  • (八十)c#Winform自定义控件-分割线标签-HZHControls

    官网

    http://www.hzhcontrols.com

    前提

    入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果觉得写的还行,请点个 star 支持一下吧

    欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

    来都来了,点个【推荐】再走吧,谢谢

    NuGet

    Install-Package HZH_Controls

    目录

    https://www.cnblogs.com/bfyx/p/11364884.html

    用处及效果

    准备工作

    这个比较简单,对label扩展,重绘划线即可

    开始

    添加一个类UCSplitLabel ,继承 Label

    代码比较少

      1 // ***********************************************************************
      2 // Assembly         : HZH_Controls
      3 // Created          : 2019-10-09
      4 //
      5 // ***********************************************************************
      6 // <copyright file="UCSplitLabel.cs">
      7 //     Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
      8 // </copyright>
      9 //
     10 // Blog: https://www.cnblogs.com/bfyx
     11 // GitHub:https://github.com/kwwwvagaa/NetWinformControl
     12 // gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
     13 //
     14 // If you use this code, please keep this note.
     15 // ***********************************************************************
     16 using System;
     17 using System.Collections.Generic;
     18 using System.Linq;
     19 using System.Text;
     20 using System.Windows.Forms;
     21 using System.Drawing;
     22 using System.ComponentModel;
     23 
     24 namespace HZH_Controls.Controls
     25 {
     26     /// <summary>
     27     /// Class UCSplitLabel.
     28     /// Implements the <see cref="System.Windows.Forms.Label" />
     29     /// </summary>
     30     /// <seealso cref="System.Windows.Forms.Label" />
     31     public class UCSplitLabel : Label
     32     {
     33         /// <summary>
     34         /// Gets or sets the text.
     35         /// </summary>
     36         /// <value>The text.</value>
     37         [Localizable(true)]
     38         public override string Text
     39         {
     40             get
     41             {
     42                 return base.Text;
     43             }
     44             set
     45             {
     46                 base.Text = value;
     47                 ResetMaxSize();
     48             }
     49         }
     50         /// <summary>
     51         /// 获取或设置控件显示的文字的字体。
     52         /// </summary>
     53         /// <value>The font.</value>
     54         /// <PermissionSet>
     55         ///   <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     56         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     57         ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
     58         ///   <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     59         /// </PermissionSet>
     60         [Localizable(true)]
     61         public override Font Font
     62         {
     63             get
     64             {
     65                 return base.Font;
     66             }
     67             set
     68             {
     69                 base.Font = value;
     70                 ResetMaxSize();
     71             }
     72         }
     73         /// <summary>
     74         /// 获取或设置大小,该大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的下限。
     75         /// </summary>
     76         /// <value>The minimum size.</value>
     77         [Localizable(true)]
     78         public override Size MinimumSize
     79         {
     80             get
     81             {
     82                 return base.MinimumSize;
     83             }
     84             set
     85             {
     86                 base.MinimumSize = value;
     87                 ResetMaxSize();
     88             }
     89         }
     90 
     91 
     92         /// <summary>
     93         /// 获取或设置大小,该大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的上限。
     94         /// </summary>
     95         /// <value>The maximum size.</value>
     96         [Localizable(true)]
     97         public override Size MaximumSize
     98         {
     99             get
    100             {
    101                 return base.MaximumSize;
    102             }
    103             set
    104             {
    105                 base.MaximumSize = value;
    106                 ResetMaxSize();
    107             }
    108         }
    109         /// <summary>
    110         /// 获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。
    111         /// </summary>
    112         /// <value><c>true</c> if [automatic size]; otherwise, <c>false</c>.</value>
    113         /// <PermissionSet>
    114         ///   <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    115         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    116         ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
    117         ///   <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    118         /// </PermissionSet>
    119         [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
    120         public override bool AutoSize
    121         {
    122             get
    123             {
    124                 return base.AutoSize;
    125             }
    126             set
    127             {
    128                 base.AutoSize = value;
    129             }
    130         }
    131 
    132 
    133         /// <summary>
    134         /// The line color
    135         /// </summary>
    136         private Color lineColor = LineColors.Light;
    137 
    138         /// <summary>
    139         /// Gets or sets the color of the line.
    140         /// </summary>
    141         /// <value>The color of the line.</value>
    142         public Color LineColor
    143         {
    144             get { return lineColor; }
    145             set
    146             {
    147                 lineColor = value;
    148                 Invalidate();
    149             }
    150         }
    151 
    152         /// <summary>
    153         /// Resets the maximum size.
    154         /// </summary>
    155         private void ResetMaxSize()
    156         {
    157             using (var g = this.CreateGraphics())
    158             {
    159                 var _width = Width;
    160                 var size = g.MeasureString(string.IsNullOrEmpty(Text) ? "A" : Text, Font);
    161                 if (MinimumSize.Height != (int)size.Height)
    162                     MinimumSize = new Size(base.MinimumSize.Width, (int)size.Height);
    163                 if (MaximumSize.Height != (int)size.Height)
    164                     MaximumSize = new Size(base.MaximumSize.Width, (int)size.Height);
    165                 this.Width = _width;
    166             }
    167         }
    168         /// <summary>
    169         /// Initializes a new instance of the <see cref="UCSplitLabel"/> class.
    170         /// </summary>
    171         public UCSplitLabel()
    172             : base()
    173         {
    174             if (ControlHelper.IsDesignMode())
    175             {
    176                 Text = "分割线";
    177                 Font = new Font("微软雅黑", 8f);
    178             }
    179             this.AutoSize = false;
    180             Padding = new Padding(20, 0, 0, 0);
    181             MinimumSize = new System.Drawing.Size(150, 10);
    182             PaddingChanged += UCSplitLabel_PaddingChanged;
    183             this.Width = 200;
    184         }
    185 
    186         /// <summary>
    187         /// Handles the PaddingChanged event of the UCSplitLabel control.
    188         /// </summary>
    189         /// <param name="sender">The source of the event.</param>
    190         /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    191         void UCSplitLabel_PaddingChanged(object sender, EventArgs e)
    192         {
    193             if (Padding.Left < 20)
    194             {
    195                 Padding = new Padding(20, Padding.Top, Padding.Right, Padding.Bottom);
    196             }
    197         }
    198 
    199         /// <summary>
    200         /// Handles the <see cref="E:Paint" /> event.
    201         /// </summary>
    202         /// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" /></param>
    203         protected override void OnPaint(PaintEventArgs e)
    204         {
    205             base.OnPaint(e);
    206             var g = e.Graphics;
    207             g.SetGDIHigh();
    208 
    209             var size = g.MeasureString(Text, Font);
    210             g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(1, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2), new PointF(Padding.Left - 2, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2));
    211             g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(Padding.Left + size.Width + 1, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2), new PointF(Width - Padding.Right, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2));
    212 
    213         }
    214     }
    215 }

    最后的话

    如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧

  • 相关阅读:
    Java调用wcf
    登录重构小记
    从零打造一个Web地图引擎
    Vue动态组件的实践与原理探究
    揭开Vue异步组件的神秘面纱
    使用vue实现排序算法演示动画
    C#转义字符
    asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)
    页面关闭事件onbeforeunload 记录
    执行一段sql
  • 原文地址:https://www.cnblogs.com/bfyx/p/11640479.html
Copyright © 2011-2022 走看看