zoukankan      html  css  js  c++  java
  • 分割线控件----------WinForm控件开发系列

    该控件是继承于 Control 基类开发的。这个控件没有什么技术性的东西。因为功能比较简单。主要重写了 OnPaint 方法如下

      1         protected override void OnPaint(PaintEventArgs e)
      2         {
      3             base.OnPaint(e);
      4 
      5             Graphics g = e.Graphics;
      6 
      7             int text_padding = 2;
      8             SizeF text_size = SizeF.Empty;
      9             RectangleF text_rect = RectangleF.Empty;
     10 
     11             Pen line_pen = new Pen(this.LineColor, this.LineThickness);
     12             int circular = this.lineCircular ? this.LineThickness : 0;
     13             PointF line_left_s = PointF.Empty;
     14             PointF line_left_e = PointF.Empty;
     15             PointF line_right_s = PointF.Empty;
     16             PointF line_right_e = PointF.Empty;
     17 
     18             #region 文字
     19             if (!String.IsNullOrEmpty(this.Text))
     20             {
     21                 SolidBrush text_sb = new SolidBrush(this.ForeColor);
     22                 StringFormat text_sf = null;
     23 
     24                 #region
     25                 if (this.LineOrientation == LineOrientations.Horizontal)
     26                 {
     27                     text_size = g.MeasureString(this.Text, this.Font, 1000, text_sf);
     28                     #region
     29                     float y = 0;
     30                     if (this.textAlign == TextAligns.Top)
     31                     {
     32                         y = (this.ClientRectangle.Height - (this.lineThickness + text_size.Height)) / 2f;
     33                     }
     34                     else if (this.textAlign == TextAligns.Center)
     35                     {
     36                         y = (this.ClientRectangle.Height - text_size.Height) / 2f;
     37                     }
     38                     else if (this.textAlign == TextAligns.Bottom)
     39                     {
     40                         y = (this.ClientRectangle.Height - (this.lineThickness + text_padding + text_size.Height)) / 2f + this.lineThickness+ text_padding;
     41                     }
     42                     #endregion
     43                     if (this.TextOrientation == TextOrientations.Left)
     44                     {
     45                         text_rect = new RectangleF(this.ClientRectangle.X + this.textDistance, y, text_size.Width, text_size.Height);
     46                     }
     47                     else
     48                     {
     49                         text_rect = new RectangleF(this.ClientRectangle.Right - this.textDistance - text_size.Width, y, text_size.Width, text_size.Height);
     50                     }
     51                 }
     52                 #endregion
     53                 #region
     54                 else
     55                 {
     56                     text_sf = new StringFormat() { FormatFlags = StringFormatFlags.DirectionVertical };
     57                     text_size = g.MeasureString(this.Text, this.Font, 1000, text_sf);
     58                     #region
     59                     float x = 0;
     60                     if (this.textAlign == TextAligns.Top)
     61                     {
     62                         x = (this.ClientRectangle.Width - (this.lineThickness + text_size.Width)) / 2f;
     63                     }
     64                     else if (this.textAlign == TextAligns.Center)
     65                     {
     66                         x = (this.ClientRectangle.Width - text_size.Width) / 2f;
     67                     }
     68                     else if (this.textAlign == TextAligns.Bottom)
     69                     {
     70                         x = (this.ClientRectangle.Width - (this.lineThickness + text_padding + text_size.Width)) / 2f + this.lineThickness + text_padding;
     71                     }
     72                     #endregion
     73                     if (this.TextOrientation == TextOrientations.Left)
     74                     {
     75                         text_rect = new RectangleF(x, this.ClientRectangle.Y + this.textDistance, text_size.Width, text_size.Height);
     76                     }
     77                     else
     78                     {
     79                         text_rect = new RectangleF(x, this.ClientRectangle.Bottom - this.textDistance - text_size.Height, text_size.Width, text_size.Height);
     80                     }
     81                 }
     82                 #endregion
     83 
     84                 g.DrawString(this.Text, this.Font, text_sb, text_rect, text_sf);
     85                 text_sb.Dispose();
     86                 if (text_sf != null)
     87                 {
     88                     text_sf.Dispose();
     89                 }
     90             }
     91             #endregion
     92 
     93             #region 线条
     94             #region 两条线
     95             if (!String.IsNullOrEmpty(this.Text) && this.textAlign == TextAligns.Center)
     96             {
     97                 if (this.LineOrientation == LineOrientations.Horizontal)
     98                 {
     99                     #region
    100                     float y = 0;
    101                     if (this.textAlign == TextAligns.Top)
    102                     {
    103                         y = text_rect.Bottom + this.LineThickness / 2f;
    104                     }
    105                     else if (this.textAlign == TextAligns.Center)
    106                     {
    107                         y = this.ClientRectangle.Height / 2f;
    108                     }
    109                     else if (this.textAlign == TextAligns.Bottom)
    110                     {
    111                         y = text_rect.Y - this.LineThickness / 2f;
    112                     }
    113                     #endregion
    114                     line_left_s = new PointF(this.ClientRectangle.X + circular, y);
    115                     line_left_e = new PointF(text_rect.X - text_padding, y);
    116                     line_right_s = new PointF(text_rect.Right + text_padding, y);
    117                     line_right_e = new PointF(this.ClientRectangle.Right - circular, y);
    118                 }
    119                 else
    120                 {
    121                     #region
    122                     float x = 0;
    123                     if (this.textAlign == TextAligns.Top)
    124                     {
    125                         x = text_rect.Right + this.LineThickness / 2f;
    126                     }
    127                     else if (this.textAlign == TextAligns.Center)
    128                     {
    129                         x = this.ClientRectangle.Width / 2f;
    130                     }
    131                     else if (this.textAlign == TextAligns.Bottom)
    132                     {
    133                         x = text_rect.X - this.LineThickness / 2f;
    134                     }
    135                     #endregion
    136                     line_left_s = new PointF(x, this.ClientRectangle.Y + circular);
    137                     line_left_e = new PointF(x, text_rect.Y - text_padding);
    138                     line_right_s = new PointF(x, text_rect.Bottom + text_padding);
    139                     line_right_e = new PointF(x, this.ClientRectangle.Bottom - circular);
    140                 }
    141                 if (this.lineCircular)
    142                 {
    143                     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    144                     line_pen.StartCap = LineCap.Round;
    145                     g.DrawLine(line_pen, line_left_s, line_left_e);
    146                     line_pen.StartCap = LineCap.Flat;
    147                     line_pen.EndCap = LineCap.Round;
    148                     g.DrawLine(line_pen, line_right_s, line_right_e);
    149                 }
    150                 else
    151                 {
    152                     g.DrawLine(line_pen, line_left_s, line_left_e);
    153                     g.DrawLine(line_pen, line_right_s, line_right_e);
    154                 }
    155             }
    156             #endregion
    157             #region 一条线
    158             else
    159             {
    160                 if (this.LineOrientation == LineOrientations.Horizontal)
    161                 {
    162                     #region
    163                     float y = 0;
    164                     if (this.textAlign == TextAligns.Top)
    165                     {
    166                         y = text_rect.Bottom + this.LineThickness / 2f;
    167                     }
    168                     else if (this.textAlign == TextAligns.Center)
    169                     {
    170                         y = this.ClientRectangle.Height / 2f;
    171                     }
    172                     else if (this.textAlign == TextAligns.Bottom)
    173                     {
    174                         y = text_rect.Y- text_padding - this.LineThickness / 2f;
    175                     }
    176                     #endregion
    177                     line_left_s = new PointF(this.ClientRectangle.X + circular, y);
    178                     line_left_e = new PointF(this.ClientRectangle.Right - circular, y);
    179                 }
    180                 else
    181                 {
    182                     #region
    183                     float x = 0;
    184                     if (this.textAlign == TextAligns.Top)
    185                     {
    186                         x = text_rect.Right + this.LineThickness / 2f;
    187                     }
    188                     else if (this.textAlign == TextAligns.Center)
    189                     {
    190                         x = this.ClientRectangle.Width / 2f;
    191                     }
    192                     else if (this.textAlign == TextAligns.Bottom)
    193                     {
    194                         x = text_rect.X - text_padding - this.LineThickness / 2f;
    195                     }
    196                     #endregion
    197                     line_left_s = new PointF(x, this.ClientRectangle.Y + circular);
    198                     line_left_e = new PointF(x, this.ClientRectangle.Bottom - circular);
    199                 }
    200                 if (this.lineCircular)
    201                 {
    202                     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    203                     line_pen.StartCap = LineCap.Round;
    204                     line_pen.EndCap = LineCap.Round;
    205                 }
    206                 g.DrawLine(line_pen, line_left_s, line_left_e);
    207             }
    208             #endregion
    209 
    210             line_pen.Dispose();
    211             #endregion
    212 
    213         }

     新增属性如下

    控件库的源码已整体发布到gitee,下载地址:(花木兰控件库)https://gitee.com/tlmbem/hml

  • 相关阅读:
    Minio对象存储
    白话解说TCP/IP协议三次握手和四次挥手
    企业环境下MySQL5.5调优
    Mac下iTerm2配置lrzsz功能
    七牛云图床和Markdown使用
    SSIS: 把存储在数据库中的图片导出来
    关闭Outlook的时候使之最小化
    【转】CTE(公用表表达式)
    通过SSIS监控远程服务器磁盘空间并发送邮件报警
    在Windows Server 2008 R2 中架设 SMTP 服务器
  • 原文地址:https://www.cnblogs.com/tlmbem/p/13573872.html
Copyright © 2011-2022 走看看