• winfrom自绘窗体边框——c#


    FormBorderStyle设置为None,就变成无框的啦,不过你会发现这样窗体上就没有原来的最大最小化和关闭按钮了哦,所以要自己补上去。弄个panel放上去,置顶,可以设置panel的背景色和背景图片什么的,详细布局就不赘述啦,见下图,主要是再放三个小panel进去,用来做最小化、最大化、关闭按钮。下面给出三个panel的事件代码。

    关闭代码

    复制代码
            private void pnlFormClose_MouseClick(object sender, MouseEventArgs e)
            {
                DialogResult result = MessageBox.Show("是否退出?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    //this.Dispose();
                    Application.Exit();
                }
            }
    复制代码

    最下化代码

            private void pnlFormMin_MouseClick(object sender, MouseEventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
            }

    这里最小化后可以加入最小化到桌面右下角,http://www.cnblogs.com/wuyouyu/p/3356303.html里已经写了相应代码。

    最大化代码,这里窗体正常状态点击则最大化,最大化状态点击则变为常态

    复制代码
            //最大化还原切换
            private bool max = false;
            private void pnlFormMax_MouseClick(object sender, MouseEventArgs e)
            {
                if (max)
                {
                    this.WindowState = FormWindowState.Normal;
                    max = false;
                }
                else
                {
                    this.WindowState = FormWindowState.Maximized;
                    max = true;
                }
            }
    复制代码

    最大化后,可以将最大化图片切换下,加句 this.pnlFormMax.BackgroundImage = Properties.Resources.要切换的图片名;

    这里说明下BackgroundImage图片导入的时候,有本地资源和项目资源文件两个选项,后者会生成Resources文件夹,存放导入的文件,否则就得写图片的物理地址了。

    三个按钮写完,基本工作还是没有结束,运行的时候会发现这个窗体不能拖动,要补充窗体可拖动代码,

    复制代码
    //窗体拖动
            private Point mousePoint = new Point();
            private void pnlCloseBar_MouseDown(object sender, MouseEventArgs e)
            {
                base.OnMouseDown(e);
                this.mousePoint.X = e.X;
                this.mousePoint.Y = e.Y;
            }
    
            private void pnlCloseBar_MouseMove(object sender, MouseEventArgs e)
            {
                base.OnMouseMove(e);
                if (e.Button == MouseButtons.Left)
                {
                    this.Top = Control.MousePosition.Y - mousePoint.Y;
                    this.Left = Control.MousePosition.X - mousePoint.X;
                }
            }
    复制代码

    到此基本工作做完。

    拓展:1、可以加入鼠标经过三个小panel时的效果,分别写MouseDown、MouseEnter、MouseLeave、MouseUp事件,切换下图片就行了。

    复制代码
            private void pnlFormMax_MouseLeave(object sender, EventArgs e)
            {
                if (!max)
                {
                    this.pnlFormMax.BackgroundImage = Properties.Resources.btn_FrmMax_Normal;
                }
                else
                {
                    this.pnlFormMax.BackgroundImage = Properties.Resources.btn_FrmRestore_Normal;
                }
            }
    复制代码

    2、可以加入双击窗体上边框,窗体最大化效果等。

    3、可以在右上角加入一个小panel作为设置按钮,用户可以自定义皮肤,窗体颜色,或者加入背景图片等

    本文转自:https://www.cnblogs.com/wuyouyu/p/3360299.html

  • 相关阅读:
    Linux C/C++ 利用scandir和alphasort遍历目录文件并排序
    C++11 多线程之互斥量、条件变量、call_once使用简介
    Win8 ApplicationModel Angkor:
    WinJS.Binding Angkor:
    WinJS.UI.Animation Angkor:
    WinJS.Class Angkor:
    WinJS.Application Angkor:
    WinJS.Promise Angkor:
    Rocket core ctrl_stalld和ctrl_killd
    Rocket core pipeline和replay
  • 原文地址:https://www.cnblogs.com/eve612/p/14144172.html
Copyright © 2020-2023  润新知