LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#自定义Winform无边框窗体

admin
2021年1月30日 12:8 本文热度 2907

在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF、或者一些第三方的库等。本例中将采用WinForm设计一个扁平美观的窗体。

上一篇中我们制作了一个button按钮控件,刚好本例可采用    

需要的可以参考:C#自定义Button按钮控件

窗体效果:


接下来就是窗体的设计

1.添加一个窗体继承原来的窗体Form

1 public partial class FormEX : Form

2.添加窗体属性

1 /// <summary> 2 /// 是否允许最大化 3 /// </summary> 4 private bool maxVisible = true; 5 [Description("是否允许最大化")] 6 public bool MaxVisible 7 { 8 get { return maxVisible; } 9 set 10 { 11 maxVisible = value; 12 if (!maxVisible) 13 { 14 this.btnEXMin.Location = new System.Drawing.Point(this.btnEXMax.Location.X, 12); 15 this.btnEXMax.Visible = false; 16 } 17 else 18 { 19 this.btnEXMin.Location = new System.Drawing.Point(this.btnEXMax.Location.X - 20, 12); 20 this.btnEXMax.Visible = true; 21 } 22 } 23 } 24 25 26 /// <summary> 27 /// 窗体标题 28 /// </summary> 29 private string titleText; 30 [Description("窗体标题")] 31 public string TitleText 32 { 33 get { return titleText; } 34 set 35 { 36 titleText = value; 37 title.Text = titleText; 38 39 } 40 } 41 /// <summary> 42 /// 窗体标题是否显示 43 /// </summary> 44 private bool titleVisible = true; 45 [Description("窗体标题是否显示")] 46 public bool TitleVisible 47 { 48 get { return titleVisible; } 49 set 50 { 51 titleVisible = value; 52 title.Visible = titleVisible; 53 } 54 } 55 56 /// <summary> 57 /// 窗口默认大小 58 /// FormSize.NORMAL OR FormSize.MAX 59 /// </summary> 60 private FormSize defaultFormSize = FormSize.NORMAL; 61 [Description("窗口默认大小")] 62 public FormSize DefaultFormSize 63 { 64 get { return defaultFormSize; } 65 set 66 { 67 defaultFormSize = value; 68 if (defaultFormSize == FormSize.MAX) 69 { 70 //防止遮挡任务栏 71 this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); 72 this.WindowState = FormWindowState.Maximized; 73 //最大化图标切换 74 this.btnEXMax.ImageDefault = global::BenNHControl.Properties.Resources.MaxNormal; 75 } 76 } 77 }

3.窗体大小自由更改

1 const int WM_NCHITTEST = 0x0084; 2 const int HTLEFT = 10; //左边界 3 const int HTRIGHT = 11; //右边界 4 const int HTTOP = 12; //上边界 5 const int HTTOPLEFT = 13; //左上角 6 const int HTTOPRIGHT = 14; //右上角 7 const int HTBOTTOM = 15; //下边界 8 const int HTBOTTOMLEFT = 0x10; //左下角 9 const int HTBOTTOMRIGHT = 17; //右下角

protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_NCHITTEST: base.WndProc(ref m); Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF); vPoint = PointToClient(vPoint); if (vPoint.X <= 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPLEFT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMLEFT; else m.Result = (IntPtr)HTLEFT; else if (vPoint.X >= ClientSize.Width - 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPRIGHT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMRIGHT; else m.Result = (IntPtr)HTRIGHT; else if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOP; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOM; break; default: base.WndProc(ref m); break; } }

4.窗体按钮等事件添加

1 /// <summary> 2 /// 最小化按钮事件 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btnEXMin_ButtonClick(object sender, EventArgs e) 7 { 8 this.WindowState = FormWindowState.Minimized; 9 } 10 11 /// <summary> 12 /// 最大化按钮事件 13 /// </summary> 14 /// <param name="sender"></param> 15 /// <param name="e"></param> 16 private void btnEXMax_ButtonClick(object sender, EventArgs e) 17 { 18 this.MaxNormalSwitch(); 19 } 20 21 /// <summary> 22 /// 关闭按钮事件 23 /// </summary> 24 /// <param name="sender"></param> 25 /// <param name="e"></param> 26 private void btnEXClose_ButtonClick(object sender, EventArgs e) 27 { 28 this.Close(); 29 } 30 31 /// <summary> 32 /// 鼠标按下标题栏 33 /// </summary> 34 /// <param name="sender"></param> 35 /// <param name="e"></param> 36 private void titleBar_MouseDown(object sender, MouseEventArgs e) 37 { 38 mPoint = new Point(e.X, e.Y); 39 } 40 41 /// <summary> 42 /// 鼠标在移动 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 private void titleBar_MouseMove(object sender, MouseEventArgs e) 47 { 48 if (e.Button == MouseButtons.Left) 49 { 50 this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y); 51 } 52 } 53 54 private void titleBar_DoubleClick(object sender, EventArgs e) 55 { 56 this.MaxNormalSwitch(); 57 } 58 59 60 /// <summary> 61 /// 最大化和正常状态切换 62 /// </summary> 63 private void MaxNormalSwitch() 64 { 65 if (this.WindowState == FormWindowState.Maximized)//如果当前状态是最大化状态 则窗体需要恢复默认大小 66 { 67 this.WindowState = FormWindowState.Normal; 68 // 69 this.btnEXMax.ImageDefault = global::BenNHControl.Properties.Resources.Max; 70 } 71 else 72 { 73 //防止遮挡任务栏 74 this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); 75 this.WindowState = FormWindowState.Maximized; 76 //最大化图标切换 77 this.btnEXMax.ImageDefault = global::BenNHControl.Properties.Resources.MaxNormal; 78 } 79 this.Invalidate();//使重绘 80 } 81 82 private void FormEX_Resize(object sender, EventArgs e) 83 { 84 this.Invalidate();//使重绘 85 }

窗体效果展示

工程源程序下载 


该文章在 2021/1/30 12:08:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved