winform 窗体禁用关闭按钮的三种方法

 在winform中,系统默认是不能够禁用窗体的关闭功能,但是,有时我们需要这种功能来屏蔽用户"随便"或不小心关闭造成的系统问题。

        下面介绍三种禁用系统关闭功能的方法,这三种方法虽然达到的效果是一样的,但是,有时,在不同的项目需求下,三种方法各自可以达到不同的要求:

1:

protected override void WndProc(ref   Message m)

        {

            const int WM_SYSCOMMAND = 0x0112;

            const int SC_CLOSE = 0xF060;

            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)

            {

                return;

            }

            base.WndProc(ref m);

        }

这种方法让窗体的关闭按钮还是存在的,但是,鼠标操作关闭按钮是没有效果的。这种一般在系统利用第三方控件后,出现别的方法使禁用关闭按钮失效,但是,这种方法可以确保万无一失。(比如,系统在利用皮肤控件后,加载别的方法来禁用窗体的关闭按钮,这时你会发现,窗体的关闭按钮禁用无效。那么,就用这种方法)

2:

protected override CreateParams CreateParams

        {

            get

            {

                int CS_NOCLOSE = 0×200;

                CreateParams parameters = base.CreateParams;

                parameters.ClassStyle |= CS_NOCLOSE;

                return parameters;

            }

        }

3:

using System.Runtime.InteropServices; //禁用关闭按钮需要引用这个

/***************************禁用关闭按钮需要***********************/
     
   [DllImport("USER32.DLL")]
        public static extern int GetSystemMenu(int hwnd, int bRevert);
        [DllImport("USER32.DLL")]
        public static extern int RemoveMenu(int hMenu, int nPosition, int wFlags);

        const int MF_REMOVE = 0x1000;

        const int SC_RESTORE = 0xF120; //还原
        const int SC_MOVE = 0xF010; //移动

        const int SC_SIZE = 0xF000; //大小

        const int SC_MINIMIZE = 0xF020; //最小化

        const int SC_MAXIMIZE = 0xF030; //最大化

        const int SC_CLOSE = 0xF060; //关闭

        /******************************************************************/

private void Form_Load(object sender, EventArgs e)
        {
            /***************************
禁用关闭按钮需要***********************/
            int hMenu = GetSystemMenu(this.Handle.ToInt32(), 0);
            RemoveMenu(hMenu, SC_CLOSE, MF_REMOVE);

            /******************************************************************/
        }

这两种方法都是很平常的方法,调用API函数,这种有时在利用第三方控件后,方法失效。那么,还是推荐第一种方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值