一起学winform(.net)(持续更新)

本文详细介绍了如何在C#的Winform应用中实现系统托盘功能,包括UI设计步骤、定时任务、高DPI支持以及无边框窗体的移动和大小调整。同时,还涉及了如何添加titleIcon、max/min/close按钮和特效的实现。
摘要由CSDN通过智能技术生成

拒绝废话!

vs 2022 community     win10 64位。

系统托盘使用例子

效果:2秒后进入右下角系统托盘

namespace xxx
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // 这个函数是手写的
        protected override async void OnShown(EventArgs e)
        {
            base.OnShown(e);
            for (int i = 2; i >= 0; i--)
            {
                // 更新UI,必须在UI线程上执行  
                label1.Text = i + " :秒后自动最小化到任务栏...";

                // 等待一秒,不阻塞UI线程  不能使用thread.sleep
                await Task.Delay(1000);  
            }
            Hide(); // 隐藏窗体  

            //如果没有上面for循环,这句不用写。写这句之前要求将notifyIcon1属性的visable设置为false
            //如果没有上面for循环而不写这句,将会在窗口出现的时候,系统托盘出现图标。
            notifyIcon1.Visible = true;  
        }
        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Show();  // 显示窗体
            this.WindowState = FormWindowState.Normal;  // 恢复窗体正常大小
            this.notifyIcon1.Visible = false;  // 隐藏托盘图标
        }
        private void 显示窗体ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Show();
            this.WindowState = FormWindowState.Normal;  
            this.notifyIcon1.Visible = false;  
        }
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();  //退出程序
        }
    }
}

系统托盘----UI设计器步骤:

1.新建项目winform  .net窗体应用c#语言的。

2.工具栏拖入一个label  (如果没有工具栏,按ctrl+alt+x调出)

3.工具栏拖入一个notifyicon在窗体内任意位置,会自动跑到窗体下面

4.工具栏拖入一个contextMenueStrip在窗体内任意位置,会自动跑到窗体下面

5.鼠标右击窗体下面的notifyicon,点击属性 -->选择之前下载好的icon格式图标 -->继续在属性栏找到contextMenueStrip选项,选择刚才拖入的那个contextMenueStrip  (根据上面代码,考虑是否要继续在属性栏找到icon的visable选择)

6.左键点击窗体下面的contextMenueStrip,发现窗体内有需要编辑的菜单栏(即最小化后右键的菜单选项),在“请在此处键入”点击并写入菜单名字(比如:显示窗体),依次写入需要的菜单名字用于定义接下来的事件。

7.依次右键点击(比如第6步的显示窗体),选择属性,然后点击下图“闪电图标”,并点击其中的click右边的选项框,选择需要的(比如显示窗体....),然后按回车键进入事件函数...,完成剩余的菜单事件编辑....代码如上。

界面启用高DPI方法(消灭界面模糊)

 1.按下图新建配置文件(截图自Winform 支持高DPI的几种方式-CSDN博客

2.找到manifest文件,把下面这段注释掉的代码取消注释即可 。

无边框form实现可以移动

 方法源自:c# winform 无边框窗体 移动办法_winform边框拖动不了了-CSDN博客

当form1的formborderstyle属性设置成none时无法移动窗体,解决方法是:

namespace xxx
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //当formborderstyle设置成none无法移动窗体时使用这个方法
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if (e.Button == MouseButtons.Left)
            {
                //这里一定要判断鼠标左键按下状态,否则会出现一个很奇葩的BUG,不信邪可以试一下~~
                ReleaseCapture();
                SendMessage(Handle, 0x00A1, 2, 0);
            }
        }

    }
}

补全titleIcon图标,max,min,close按钮

拖动panel控件(panel控件默认没有边框)作为标题栏底色控件,设置颜色,尺寸。

拖动3个按钮到form设计器内,摆放好位置并设置他们的imagine,anchor(影响当界面最大化后控件四周是否启用“锚定”父控件四周,即是否跟随移动或拉伸),BackColor设置为同panel颜色,FlatApperance的BorderSize设置为0,FlatStyle设置为Flat,其他属性....;继续定义对应事件即可。如果label看不见了(鼠标移动到原label位置能看到border),设置其ForeColor属性(影响字体颜色)即可。

事件代码参考:

 private void closeBtn_Click_1(object sender, EventArgs e)
 {
     Application.Exit();
 }

 private void maxSizeBtn_Click(object sender, EventArgs e)
 {
     if (WindowState == FormWindowState.Maximized)
     {
         WindowState = FormWindowState.Normal;
     }
     else
     {
         WindowState = FormWindowState.Maximized;
     }
     
 }

 private void miniSizeBtn_Click(object sender, EventArgs e)
 {
     WindowState = FormWindowState.Minimized;
 }

运行样式参考:

此时拖动panel控件是无法移动窗体的,解决方案:

namespace xxx
{
    public partial class Form1 : Form
    {
        private Point dragCursorPoint;
        private Point dragFormOffset;

        public Form1()
        {
            InitializeComponent();
        }
        //任意位置追加这一段代码,思路是:
        //按下鼠标时记录光标和光标相对form的左上角的位置,因为this.Location默认是窗体的左上角坐标。
       //当panel1_MouseMove事件发生时,更新窗体的位置。
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            dragCursorPoint = Cursor.Position;
            dragFormOffset = this.Location; 
            dragFormOffset.Offset(-dragCursorPoint.X, -dragCursorPoint.Y);
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                // 计算新的窗体位置  
                Point newLocation = Cursor.Position;
                newLocation.Offset(dragFormOffset.X, dragFormOffset.Y);

                // 更新窗体的位置  
                this.Location = newLocation;
            }
        }
    }
}

此时无法实现鼠标拖动窗体边缘调整窗体大小,解决方案:暂无!!!

 一些特效或布局

一个非常简单的特效 :

//效果是:当鼠标进入这个控件,控件向上凸起,离开后复位。
private void panel3_MouseEnter(object sender, EventArgs e)
{
    origenalLocation = panel3.Location;  //保存原始位置
    panel3.BackColor = Color.Red;
    panel3.Location = new Point(panel3.Location.X, panel3.Location.Y - 20); //新位置
}

private void panel3_MouseLeave(object sender, EventArgs e)
{
    panel3.BackColor = Color.White;
    panel3.Location = origenalLocation;
}

".NET Core", ".NET Framework", WPF (Windows Presentation Foundation), 和 WinForms (Windows Forms) 都是与 .NET 相关的技术,但它们有一些区别。 1. .NET Framework: - .NET Framework 是最早发布的 .NET 平台,它是用于构建 Windows 应用程序的一种技术框架。 - 它提供了广泛的类库和功能,用于开发各种类型的应用程序,包括桌面应用程序、Web 应用程序和服务应用程序等。 - .NET Framework 只能在 Windows 操作系统上运行,因此它对于跨平台开发是不够灵活的。 2. .NET Core: - .NET Core 是微软在 .NET 平台的下一代开发平台,它是一个跨平台的开源框架。 - .NET Core 支持在 Windows、macOS 和 Linux 等多个操作系统上运行,因此可以实现跨平台开发。 - 它具有较小的安装包大小、更快的性能和更好的可扩展性。 - .NET Core 提供了 ASP.NET Core(用于构建 Web 应用程序)和 EF Core(用于数据访问)等组件。 3. WPF (Windows Presentation Foundation): - WPF 是一种用于构建 Windows 桌面应用程序的用户界面技术。 - 它提供了丰富的界面设计功能,支持XAML(可扩展应用程序标记语言)来定义应用程序的用户界面。 - WPF 可以与 .NET Framework 或 .NET Core 一起使用。 4. WinForms (Windows Forms): - WinForms 是一种用于构建 Windows 桌面应用程序的用户界面技术。 - 它使用基于事件的编程模型,通过在窗体上添加控件来构建应用程序的用户界面。 - WinForms 只能与 .NET Framework 一起使用。 总结: .NET Core 是一个跨平台的开源框架,可以用于构建各种类型的应用程序,包括 Web 应用程序和桌面应用程序。.NET Framework 是一个仅限于 Windows 平台的框架,具有更广泛的类库和功能。WPF 和 WinForms 则是两种用于构建 Windows 桌面应用程序的用户界面技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值