0


C# winform窗体UI美化后实现最大化、最小化、还原、关闭、窗体移动等等-2023/1/11

C# winform窗体UI美化后实现最大化、最小化、还原、关闭、窗体移动等等

在做winform窗体UI美化时,一般都需要将窗体的FormBorderStyle属性设为None,之后窗体就会没有最上面的标题栏,然后按照UI进行界面的设计。美化的代价就是窗体本来标题栏的相关操作,例如双击自动最大化,再次双击又恢复正常大小,以及上窗体关闭、最小化等功能就都需要自己实现对应的功能。

以自己做得项目为例,窗体的最上面一块就是类似或者需要实现标题栏功能的,用panel划定一个范围。之后所有的操作都是重写panel里面的方法。

实现最大化和还原

如果UI设计的是有按钮,那就最好。

/// <summary>/// 窗体 最大化,正常/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtn_Max_Click(object sender,EventArgs e){if(this.WindowState == FormWindowState.Maximized){this.WindowState = FormWindowState.Normal;Image maxbackImage = Resources.最大化;//这里图片调用UI设计的图片
                btn_Max.BackgroundImage = maxbackImage;}else{this.WindowState = FormWindowState.Maximized;Image normalbackImage = Resources.正常;
                btn_Max.BackgroundImage = normalbackImage ;}}

如果为了美观UI连按钮也没有设计,那就模仿标题栏自带的功能,重写panel的MouseDoubleClick方法

/// <summary>/// 窗体 最大化,正常/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidpanel_top_MouseDoubleClick(object sender,MouseEventArgs e){if(this.WindowState == FormWindowState.Maximized){this.WindowState = FormWindowState.Normal;}else{this.WindowState = FormWindowState.Maximized;}}

最大化过程中可能遇到的问题

最大化了之后把屏幕下方的任务栏遮挡了

这个需要在窗体load的进行一些设置,vs自带的会对一些属性进行文字说明,看过之后就知道这么设置的目的了。

privatevoidFormMain_Load(object sender,EventArgs e){this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;this.WindowState = System.Windows.Forms.FormWindowState.Maximized;}

需要注意的是,vs还自带了属性窗口,如果你在窗体的属性窗口中已经设置它的WindowState为Maximized的话,那么再用上面的代码来设置就会失效。所以,使用上面的代码时,要把窗体属性中的WindowState设置为Normal才行。
到这里就应该可以解决绝大多数的需求了,但是在项目中,又遇到了拓展显示屏的情况(就是需要屏幕1一个窗体,同时屏幕2也需要生成一个窗体)。这个实现也可以记录一下。

//第二个窗体
            _Form2 =newForm2();Screen[] screens = Screen.AllScreens;if(screens.Length >1){
                _Form2 .Location =newPoint(screens[1].Bounds.Left, screens[1].Bounds.Top);}
            _Form2 .Show();

需要注意的是,如果屏幕2运行软件的话,按照上面的load设置,软件生成的2个窗体会同时生成在屏幕2,在屏幕1运行软件的话,则会正常生成1个屏幕1个窗体

最小化

同理上面最大化,有按钮设计最好,没有按钮设计的话,那就依据需求,自己判断以什么方式触发。

/// <summary>/// 窗体 最小化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtn_Min_Click(object sender,EventArgs e){this.WindowState = FormWindowState.Minimized;}

关闭

这没啥好说的,肯定会有设计的。这里设计是一个图片。

/// <summary>/// 退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidpictureBox_quit_Click(object sender,EventArgs e){DialogResult rst = MessageBox.Show(this,"确认系统?","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if(rst == DialogResult.Yes){
                Application.ExitThread();
                Application.Exit();}}

窗体移动

这里可以利用window的api函数

//调用API函数  需要添加引用using System.Runtime.InteropServices;[DllImport("user32.dll")]publicstaticexternboolReleaseCapture();[DllImport("user32.dll")]publicstaticexternboolSendMessage(IntPtr hwnd,int wMsg,int wParam,int lParam);/// <summary>/// 窗体移动/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidpanel_top_MouseDown(object sender,MouseEventArgs e){if(e.Clicks ==1){//窗体移动默认鼠标左键if(e.Button == MouseButtons.Left){ReleaseCapture();//释放鼠标捕捉SendMessage(this.Handle,0xA1,0x02,0);//发送左键点击的消息至该窗体(标题栏)}}}
标签: ui c# 开发语言

本文转载自: https://blog.csdn.net/lilizys/article/details/128639399
版权归原作者 lilizys 所有, 如有侵权,请联系我们删除。

“C# winform窗体UI美化后实现最大化、最小化、还原、关闭、窗体移动等等-2023/1/11”的评论:

还没有评论