前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 如果觉得写的还行,请点个 star 支持一下吧
前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
准备工作
前面介绍了那么多控件(虽然重要的文本框还没有出现),终于轮到窗体上场了
首先我们需要一个基类窗体,所有的窗体都将继承基类窗体
基类窗体需要实现哪些功能呢?
- 圆角
- 边框
- 热键
- 蒙版
开始
添加一个Form,命名FrmBase
写上一些属性
1 [Description("定义的热键列表"), Category("自定义")] 2 public Dictionary<int, string> HotKeys { get; set; } 3 public delegate bool HotKeyEventHandler(string strHotKey); 4 /// <summary> 5 /// 热键事件 6 /// </summary> 7 [Description("热键事件"), Category("自定义")] 8 public event HotKeyEventHandler HotKeyDown; 9 #region 字段属性 10 11 /// <summary> 12 /// 失去焦点关闭 13 /// </summary> 14 bool _isLoseFocusClose = false; 15 /// <summary> 16 /// 是否重绘边框样式 17 /// </summary> 18 private bool _redraw = false; 19 /// <summary> 20 /// 是否显示圆角 21 /// </summary> 22 private bool _isShowRegion = false; 23 /// <summary> 24 /// 边圆角大小 25 /// </summary> 26 private int _regionRadius = 10; 27 /// <summary> 28 /// 边框颜色 29 /// </summary> 30 private Color _borderStyleColor; 31 /// <summary> 32 /// 边框宽度 33 /// </summary> 34 private int _borderStyleSize; 35 /// <summary> 36 /// 边框样式 37 /// </summary> 38 private ButtonBorderStyle _borderStyleType; 39 /// <summary> 40 /// 是否显示模态 41 /// </summary> 42 private bool _isShowMaskDialog = false; 43 /// <summary> 44 /// 蒙版窗体 45 /// </summary> 46 //private FrmTransparent _frmTransparent = null; 47 /// <summary> 48 /// 是否显示蒙版窗体 49 /// </summary> 50 [Description("是否显示蒙版窗体")] 51 public bool IsShowMaskDialog 52 { 53 get 54 { 55 return this._isShowMaskDialog; 56 } 57 set 58 { 59 this._isShowMaskDialog = value; 60 } 61 } 62 /// <summary> 63 /// 边框宽度 64 /// </summary> 65 [Description("边框宽度")] 66 public int BorderStyleSize 67 { 68 get 69 { 70 return this._borderStyleSize; 71 } 72 set 73 { 74 this._borderStyleSize = value; 75 } 76 } 77 /// <summary> 78 /// 边框颜色 79 /// </summary> 80 [Description("边框颜色")] 81 public Color BorderStyleColor 82 { 83 get 84 { 85 return this._borderStyleColor; 86 } 87 set 88 { 89 this._borderStyleColor = value; 90 } 91 } 92 /// <summary> 93 /// 边框样式 94 /// </summary> 95 [Description("边框样式")] 96 public ButtonBorderStyle BorderStyleType 97 { 98 get 99 { 100 return this._borderStyleType; 101 } 102 set 103 { 104 this._borderStyleType = value; 105 } 106 } 107 /// <summary> 108 /// 边框圆角 109 /// </summary> 110 [Description("边框圆角")] 111 public int RegionRadius 112 { 113 get 114 { 115 return this._regionRadius; 116 } 117 set 118 { 119 this._regionRadius = value; 120 } 121 } 122 /// <summary> 123 /// 是否显示自定义绘制内容 124 /// </summary> 125 [Description("是否显示自定义绘制内容")] 126 public bool IsShowRegion 127 { 128 get 129 { 130 return this._isShowRegion; 131 } 132 set 133 { 134 this._isShowRegion = value; 135 } 136 } 137 /// <summary> 138 /// 是否显示重绘边框 139 /// </summary> 140 [Description("是否显示重绘边框")] 141 public bool Redraw 142 { 143 get 144 { 145 return this._redraw; 146 } 147 set 148 { 149 this._redraw = value; 150 } 151 } 152 153 private bool _isFullSize = true; 154 /// <summary> 155 /// 是否全屏 156 /// </summary> 157 [Description("是否全屏")] 158 public bool IsFullSize 159 { 160 get { return _isFullSize; } 161 set { _isFullSize = value; } 162 } 163 /// <summary> 164 /// 失去焦点自动关闭 165 /// </summary> 166 [Description("失去焦点自动关闭")] 167 public bool IsLoseFocusClose 168 { 169 get 170 { 171 return this._isLoseFocusClose; 172 } 173 set 174 { 175 this._isLoseFocusClose = value; 176 } 177 } 178 #endregion 179 180 private bool IsDesingMode 181 { 182 get 183 { 184 bool ReturnFlag = false; 185 if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) 186 ReturnFlag = true; 187 else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv") 188 ReturnFlag = true; 189 return ReturnFlag; 190 } 191 }
快捷键处理
1 /// <summary> 2 /// 快捷键 3 /// </summary> 4 /// <param name="msg"></param> 5 /// <param name="keyData"></param> 6 /// <returns></returns> 7 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 8 { 9 int num = 256; 10 int num2 = 260; 11 bool result; 12 if (msg.Msg == num | msg.Msg == num2) 13 { 14 if (keyData == (Keys)262259) 15 { 16 result = true; 17 return result; 18 } 19 if (keyData != Keys.Enter) 20 { 21 if (keyData == Keys.Escape) 22 { 23 this.DoEsc(); 24 } 25 } 26 else 27 { 28 this.DoEnter(); 29 } 30 } 31 result = false; 32 if (result) 33 return result; 34 else 35 return base.ProcessCmdKey(ref msg, keyData); 36 }
1 protected void FrmBase_KeyDown(object sender, KeyEventArgs e) 2 { 3 if (HotKeyDown != null && HotKeys != null) 4 { 5 bool blnCtrl = false; 6 bool blnAlt = false; 7 bool blnShift = false; 8 if (e.Control) 9 blnCtrl = true; 10 if (e.Alt) 11 blnAlt = true; 12 if (e.Shift) 13 blnShift = true; 14 if (HotKeys.ContainsKey(e.KeyValue)) 15 { 16 string strKey = string.Empty; 17 if (blnCtrl) 18 { 19 strKey += "Ctrl+"; 20 } 21 if (blnAlt) 22 { 23 strKey += "Alt+"; 24 } 25 if (blnShift) 26 { 27 strKey += "Shift+"; 28 } 29 strKey += HotKeys[e.KeyValue]; 30 31 if (HotKeyDown(strKey)) 32 { 33 e.Handled = true; 34 e.SuppressKeyPress = true; 35 } 36 } 37 } 38 }
重绘
1 /// <summary> 2 /// 重绘事件 3 /// </summary> 4 /// <param name="e"></param> 5 protected override void OnPaint(PaintEventArgs e) 6 { 7 if (this._isShowRegion) 8 { 9 this.SetWindowRegion(); 10 } 11 base.OnPaint(e); 12 if (this._redraw) 13 { 14 ControlPaint.DrawBorder(e.Graphics, base.ClientRectangle, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType); 15 } 16 } 17 /// <summary> 18 /// 设置重绘区域 19 /// </summary> 20 public void SetWindowRegion() 21 { 22 GraphicsPath path = new GraphicsPath(); 23 Rectangle rect = new Rectangle(-1, -1, base.Width + 1, base.Height); 24 path = this.GetRoundedRectPath(rect, this._regionRadius); 25 base.Region = new Region(path); 26 } 27 /// <summary> 28 /// 获取重绘区域 29 /// </summary> 30 /// <param name="rect"></param> 31 /// <param name="radius"></param> 32 /// <returns></returns> 33 private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) 34 { 35 Rectangle rect2 = new Rectangle(rect.Location, new Size(radius, radius)); 36 GraphicsPath graphicsPath = new GraphicsPath(); 37 graphicsPath.AddArc(rect2, 180f, 90f); 38 rect2.X = rect.Right - radius; 39 graphicsPath.AddArc(rect2, 270f, 90f); 40 rect2.Y = rect.Bottom - radius; 41 rect2.Width += 1; 42 rect2.Height += 1; 43 graphicsPath.AddArc(rect2, 360f, 90f); 44 rect2.X = rect.Left; 45 graphicsPath.AddArc(rect2, 90f, 90f); 46 graphicsPath.CloseFigure(); 47 return graphicsPath; 48 }
还有为了点击窗体外区域关闭的钩子功能
1 void FrmBase_FormClosing(object sender, FormClosingEventArgs e) 2 { 3 if (_isLoseFocusClose) 4 { 5 MouseHook.OnMouseActivity -= hook_OnMouseActivity; 6 } 7 } 8 9 10 private void FrmBase_Load(object sender, EventArgs e) 11 { 12 if (!IsDesingMode) 13 { 14 if (_isFullSize) 15 SetFullSize(); 16 } 17 if (_isLoseFocusClose) 18 { 19 MouseHook.OnMouseActivity += hook_OnMouseActivity; 20 } 21 } 22 23 #endregion 24 25 #region 方法区 26 27 28 void hook_OnMouseActivity(object sender, MouseEventArgs e) 29 { 30 try 31 { 32 if (this._isLoseFocusClose && e.Clicks > 0) 33 { 34 if (e.Button == System.Windows.Forms.MouseButtons.Left || e.Button == System.Windows.Forms.MouseButtons.Right) 35 { 36 if (!this.IsDisposed) 37 { 38 if (!this.ClientRectangle.Contains(this.PointToClient(e.Location))) 39 { 40 base.Close(); 41 } 42 } 43 } 44 } 45 } 46 catch { } 47 }
为了实现蒙版,覆盖ShowDialog函数
1 public new DialogResult ShowDialog(IWin32Window owner) 2 { 3 try 4 { 5 if (this._isShowMaskDialog && owner != null) 6 { 7 var frmOwner = (Control)owner; 8 FrmTransparent _frmTransparent = new FrmTransparent(); 9 _frmTransparent.Width = frmOwner.Width; 10 _frmTransparent.Height = frmOwner.Height; 11 Point location = frmOwner.PointToScreen(new Point(0, 0)); 12 _frmTransparent.Location = location; 13 _frmTransparent.frmchild = this; 14 _frmTransparent.IsShowMaskDialog = false; 15 return _frmTransparent.ShowDialog(owner); 16 } 17 else 18 { 19 return base.ShowDialog(owner); 20 } 21 } 22 catch (NullReferenceException) 23 { 24 return System.Windows.Forms.DialogResult.None; 25 } 26 } 27 28 public new DialogResult ShowDialog() 29 { 30 return base.ShowDialog(); 31 }
最后看下完整代码
1 // 版权所有 黄正辉 交流群:568015492 QQ:623128629 2 // 文件名称:FrmBase.cs 3 // 创建日期:2019-08-15 16:04:31 4 // 功能描述:FrmBase 5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 6 using System; 7 using System.Collections.Generic; 8 using System.ComponentModel; 9 using System.Data; 10 using System.Drawing; 11 using System.Drawing.Drawing2D; 12 using System.Linq; 13 using System.Text; 14 using System.Windows.Forms; 15 16 namespace HZH_Controls.Forms 17 { 18 [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(System.ComponentModel.Design.IDesigner))] 19 public partial class FrmBase : Form 20 { 21 [Description("定义的热键列表"), Category("自定义")] 22 public Dictionary<int, string> HotKeys { get; set; } 23 public delegate bool HotKeyEventHandler(string strHotKey); 24 /// <summary> 25 /// 热键事件 26 /// </summary> 27 [Description("热键事件"), Category("自定义")] 28 public event HotKeyEventHandler HotKeyDown; 29 #region 字段属性 30 31 /// <summary> 32 /// 失去焦点关闭 33 /// </summary> 34 bool _isLoseFocusClose = false; 35 /// <summary> 36 /// 是否重绘边框样式 37 /// </summary> 38 private bool _redraw = false; 39 /// <summary> 40 /// 是否显示圆角 41 /// </summary> 42 private bool _isShowRegion = false; 43 /// <summary> 44 /// 边圆角大小 45 /// </summary> 46 private int _regionRadius = 10; 47 /// <summary> 48 /// 边框颜色 49 /// </summary> 50 private Color _borderStyleColor; 51 /// <summary> 52 /// 边框宽度 53 /// </summary> 54 private int _borderStyleSize; 55 /// <summary> 56 /// 边框样式 57 /// </summary> 58 private ButtonBorderStyle _borderStyleType; 59 /// <summary> 60 /// 是否显示模态 61 /// </summary> 62 private bool _isShowMaskDialog = false; 63 /// <summary> 64 /// 蒙版窗体 65 /// </summary> 66 //private FrmTransparent _frmTransparent = null; 67 /// <summary> 68 /// 是否显示蒙版窗体 69 /// </summary> 70 [Description("是否显示蒙版窗体")] 71 public bool IsShowMaskDialog 72 { 73 get 74 { 75 return this._isShowMaskDialog; 76 } 77 set 78 { 79 this._isShowMaskDialog = value; 80 } 81 } 82 /// <summary> 83 /// 边框宽度 84 /// </summary> 85 [Description("边框宽度")] 86 public int BorderStyleSize 87 { 88 get 89 { 90 return this._borderStyleSize; 91 } 92 set 93 { 94 this._borderStyleSize = value; 95 } 96 } 97 /// <summary> 98 /// 边框颜色 99 /// </summary> 100 [Description("边框颜色")] 101 public Color BorderStyleColor 102 { 103 get 104 { 105 return this._borderStyleColor; 106 } 107 set 108 { 109 this._borderStyleColor = value; 110 } 111 } 112 /// <summary> 113 /// 边框样式 114 /// </summary> 115 [Description("边框样式")] 116 public ButtonBorderStyle BorderStyleType 117 { 118 get 119 { 120 return this._borderStyleType; 121 } 122 set 123 { 124 this._borderStyleType = value; 125 } 126 } 127 /// <summary> 128 /// 边框圆角 129 /// </summary> 130 [Description("边框圆角")] 131 public int RegionRadius 132 { 133 get 134 { 135 return this._regionRadius; 136 } 137 set 138 { 139 this._regionRadius = value; 140 } 141 } 142 /// <summary> 143 /// 是否显示自定义绘制内容 144 /// </summary> 145 [Description("是否显示自定义绘制内容")] 146 public bool IsShowRegion 147 { 148 get 149 { 150 return this._isShowRegion; 151 } 152 set 153 { 154 this._isShowRegion = value; 155 } 156 } 157 /// <summary> 158 /// 是否显示重绘边框 159 /// </summary> 160 [Description("是否显示重绘边框")] 161 public bool Redraw 162 { 163 get 164 { 165 return this._redraw; 166 } 167 set 168 { 169 this._redraw = value; 170 } 171 } 172 173 private bool _isFullSize = true; 174 /// <summary> 175 /// 是否全屏 176 /// </summary> 177 [Description("是否全屏")] 178 public bool IsFullSize 179 { 180 get { return _isFullSize; } 181 set { _isFullSize = value; } 182 } 183 /// <summary> 184 /// 失去焦点自动关闭 185 /// </summary> 186 [Description("失去焦点自动关闭")] 187 public bool IsLoseFocusClose 188 { 189 get 190 { 191 return this._isLoseFocusClose; 192 } 193 set 194 { 195 this._isLoseFocusClose = value; 196 } 197 } 198 #endregion 199 200 private bool IsDesingMode 201 { 202 get 203 { 204 bool ReturnFlag = false; 205 if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) 206 ReturnFlag = true; 207 else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv") 208 ReturnFlag = true; 209 return ReturnFlag; 210 } 211 } 212 213 #region 初始化 214 public FrmBase() 215 { 216 InitializeComponent(); 217 base.SetStyle(ControlStyles.UserPaint, true); 218 base.SetStyle(ControlStyles.AllPaintingInWmPaint, true); 219 base.SetStyle(ControlStyles.DoubleBuffer, true); 220 //base.HandleCreated += new EventHandler(this.FrmBase_HandleCreated); 221 //base.HandleDestroyed += new EventHandler(this.FrmBase_HandleDestroyed); 222 this.KeyDown += FrmBase_KeyDown; 223 this.FormClosing += FrmBase_FormClosing; 224 } 225 226 void FrmBase_FormClosing(object sender, FormClosingEventArgs e) 227 { 228 if (_isLoseFocusClose) 229 { 230 MouseHook.OnMouseActivity -= hook_OnMouseActivity; 231 } 232 } 233 234 235 private void FrmBase_Load(object sender, EventArgs e) 236 { 237 if (!IsDesingMode) 238 { 239 if (_isFullSize) 240 SetFullSize(); 241 } 242 if (_isLoseFocusClose) 243 { 244 MouseHook.OnMouseActivity += hook_OnMouseActivity; 245 } 246 } 247 248 #endregion 249 250 #region 方法区 251 252 253 void hook_OnMouseActivity(object sender, MouseEventArgs e) 254 { 255 try 256 { 257 if (this._isLoseFocusClose && e.Clicks > 0) 258 { 259 if (e.Button == System.Windows.Forms.MouseButtons.Left || e.Button == System.Windows.Forms.MouseButtons.Right) 260 { 261 if (!this.IsDisposed) 262 { 263 if (!this.ClientRectangle.Contains(this.PointToClient(e.Location))) 264 { 265 base.Close(); 266 } 267 } 268 } 269 } 270 } 271 catch { } 272 } 273 274 275 /// <summary> 276 /// 全屏 277 /// </summary> 278 public void SetFullSize() 279 { 280 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 281 282 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 283 } 284 protected virtual void DoEsc() 285 { 286 base.Close(); 287 } 288 289 protected virtual void DoEnter() 290 { 291 } 292 293 /// <summary> 294 /// 设置重绘区域 295 /// </summary> 296 public void SetWindowRegion() 297 { 298 GraphicsPath path = new GraphicsPath(); 299 Rectangle rect = new Rectangle(-1, -1, base.Width + 1, base.Height); 300 path = this.GetRoundedRectPath(rect, this._regionRadius); 301 base.Region = new Region(path); 302 } 303 /// <summary> 304 /// 获取重绘区域 305 /// </summary> 306 /// <param name="rect"></param> 307 /// <param name="radius"></param> 308 /// <returns></returns> 309 private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) 310 { 311 Rectangle rect2 = new Rectangle(rect.Location, new Size(radius, radius)); 312 GraphicsPath graphicsPath = new GraphicsPath(); 313 graphicsPath.AddArc(rect2, 180f, 90f); 314 rect2.X = rect.Right - radius; 315 graphicsPath.AddArc(rect2, 270f, 90f); 316 rect2.Y = rect.Bottom - radius; 317 rect2.Width += 1; 318 rect2.Height += 1; 319 graphicsPath.AddArc(rect2, 360f, 90f); 320 rect2.X = rect.Left; 321 graphicsPath.AddArc(rect2, 90f, 90f); 322 graphicsPath.CloseFigure(); 323 return graphicsPath; 324 } 325 326 public new DialogResult ShowDialog(IWin32Window owner) 327 { 328 try 329 { 330 if (this._isShowMaskDialog && owner != null) 331 { 332 var frmOwner = (Control)owner; 333 FrmTransparent _frmTransparent = new FrmTransparent(); 334 _frmTransparent.Width = frmOwner.Width; 335 _frmTransparent.Height = frmOwner.Height; 336 Point location = frmOwner.PointToScreen(new Point(0, 0)); 337 _frmTransparent.Location = location; 338 _frmTransparent.frmchild = this; 339 _frmTransparent.IsShowMaskDialog = false; 340 return _frmTransparent.ShowDialog(owner); 341 } 342 else 343 { 344 return base.ShowDialog(owner); 345 } 346 } 347 catch (NullReferenceException) 348 { 349 return System.Windows.Forms.DialogResult.None; 350 } 351 } 352 353 public new DialogResult ShowDialog() 354 { 355 return base.ShowDialog(); 356 } 357 #endregion 358 359 #region 事件区 360 361 362 /// <summary> 363 /// 关闭时发生 364 /// </summary> 365 /// <param name="e"></param> 366 protected override void OnClosed(EventArgs e) 367 { 368 base.OnClosed(e); 369 if (base.Owner != null && base.Owner is FrmTransparent) 370 { 371 (base.Owner as FrmTransparent).Close(); 372 } 373 } 374 375 /// <summary> 376 /// 快捷键 377 /// </summary> 378 /// <param name="msg"></param> 379 /// <param name="keyData"></param> 380 /// <returns></returns> 381 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 382 { 383 int num = 256; 384 int num2 = 260; 385 bool result; 386 if (msg.Msg == num | msg.Msg == num2) 387 { 388 if (keyData == (Keys)262259) 389 { 390 result = true; 391 return result; 392 } 393 if (keyData != Keys.Enter) 394 { 395 if (keyData == Keys.Escape) 396 { 397 this.DoEsc(); 398 } 399 } 400 else 401 { 402 this.DoEnter(); 403 } 404 } 405 result = false; 406 if (result) 407 return result; 408 else 409 return base.ProcessCmdKey(ref msg, keyData); 410 } 411 412 protected void FrmBase_KeyDown(object sender, KeyEventArgs e) 413 { 414 if (HotKeyDown != null && HotKeys != null) 415 { 416 bool blnCtrl = false; 417 bool blnAlt = false; 418 bool blnShift = false; 419 if (e.Control) 420 blnCtrl = true; 421 if (e.Alt) 422 blnAlt = true; 423 if (e.Shift) 424 blnShift = true; 425 if (HotKeys.ContainsKey(e.KeyValue)) 426 { 427 string strKey = string.Empty; 428 if (blnCtrl) 429 { 430 strKey += "Ctrl+"; 431 } 432 if (blnAlt) 433 { 434 strKey += "Alt+"; 435 } 436 if (blnShift) 437 { 438 strKey += "Shift+"; 439 } 440 strKey += HotKeys[e.KeyValue]; 441 442 if (HotKeyDown(strKey)) 443 { 444 e.Handled = true; 445 e.SuppressKeyPress = true; 446 } 447 } 448 } 449 } 450 451 /// <summary> 452 /// 重绘事件 453 /// </summary> 454 /// <param name="e"></param> 455 protected override void OnPaint(PaintEventArgs e) 456 { 457 if (this._isShowRegion) 458 { 459 this.SetWindowRegion(); 460 } 461 base.OnPaint(e); 462 if (this._redraw) 463 { 464 ControlPaint.DrawBorder(e.Graphics, base.ClientRectangle, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType); 465 } 466 } 467 #endregion 468 469 } 470 }View Code
1 namespace HZH_Controls.Forms 2 { 3 partial class FrmBase 4 { 5 /// <summary> 6 /// Required designer variable. 7 /// </summary> 8 private System.ComponentModel.IContainer components = null; 9 10 /// <summary> 11 /// Clean up any resources being used. 12 /// </summary> 13 /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 14 protected override void Dispose(bool disposing) 15 { 16 if (disposing && (components != null)) 17 { 18 components.Dispose(); 19 } 20 base.Dispose(disposing); 21 } 22 23 #region Windows Form Designer generated code 24 25 /// <summary> 26 /// Required method for Designer support - do not modify 27 /// the contents of this method with the code editor. 28 /// </summary> 29 private void InitializeComponent() 30 { 31 System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmBase)); 32 this.SuspendLayout(); 33 // 34 // FrmBase 35 // 36 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; 37 this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247))))); 38 this.ClientSize = new System.Drawing.Size(331, 371); 39 this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 40 this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(66)))), ((int)(((byte)(66)))), ((int)(((byte)(66))))); 41 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 42 this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 43 this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 44 this.Name = "FrmBase"; 45 this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 46 this.Text = "FrmBase"; 47 this.Load += new System.EventHandler(this.FrmBase_Load); 48 this.ResumeLayout(false); 49 50 } 51 52 #endregion 53 } 54 }View Code
设计效果就是这样的
用处及效果
一般来说,这个基类窗体不直接使用,不过你高兴用的话 也是可以的 ,比如设计个圆角窗体什么的
最后的话
如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星 星吧