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

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/tlmbem/p/13573872.html
Copyright © 2011-2022 走看看