易语言转C# .Net(1) 提示框(带超时的MessageBox)

@[TOC](易语言转C# .Net(1) 提示框(带超时的MessageBox))

易语言转C# .Net(1) 提示框(带超时的MessageBox)

原因

因为MessageBox会阻塞程序运行,
而我需要的只是一个快捷的给用户提示某些轻量级的操作已经完成,不希望MessageBox来打断用户操作(需要去点某个按钮).
例如:点一个按钮,将TextBox的内容复制到剪辑板,然后去其他程序粘贴.
按了按钮之后会弹出提示框,1秒后自动关闭,这样用户就知道已经复制完成了,且超时时间很短,没必要去点击确定(敲空格也可确定)

亦或是在某些重度的操作下偶尔出现的奇怪错误,但影响不大
例如:批量调用翻译API时,翻译失败,返回的是空文本/原文本,这时候可不能弹出MessageBox阻塞程序运作,弹出超时关闭的提示框(可以在别处输出错误信息),然后程序继续运作

原理:

调用外部dll “user32.dll”(系统自带)中的 MessageBoxTimeoutA

实现方式:

代码位置可以放在这下面

       public Form1()
        {
            InitializeComponent();
        }

声明调用外部dll的代码如下

        [DllImport("user32.dll")]
        public static extern int MessageBoxTimeoutA(IntPtr 父窗口句柄, string 提示内容, string 标题, int 按钮类型, int 固定为0, int 超时时间毫秒);

我自己封装了一层

        /// <summary>
        /// 弹出一个提示框,可设置按钮,并根据用户操作返回相应值,超过时间自动关闭
        /// 原理:调用外部dll "user32.dll"(系统自带)中的 MessageBoxTimeoutA
        /// </summary>
        /// <param name="父窗口句柄">填this.Handle</param>
        /// <param name="提示内容"></param>
        /// <param name="标题">默认为 "友情提示"</param>
        /// <param name="按钮类型"> 可为按钮与图标的组合值
        /// 按钮 0:确定;1:确定+取消;2:终止+重试+忽略;3:是+否+取消;4:是+否;5:重试+取消;6:取消+重试+继续    
        /// 图标 16:#错误图标(红X); 32:#询问图标(蓝?); 48:#警告图标(黄!); 64:#信息图标(蓝i)
        /// 对齐方式 524288:#文本右对齐</param>
        /// <param name="超时时间毫秒">超时自动关闭,单位毫秒,默认5000毫秒,填0为不自动关闭</param>
        /// <returns>返回用户按下了哪个按钮 
        /// 0:确定钮,1:取消钮,2:终止钮,3:重试钮,4:忽略钮,5:是钮,6:否钮,31999:超时
        /// (注:按钮类型非0时才可能返回31999;按钮类型为0时,超时也返回0:确定钮)
        /// (注:存在取消按钮时,右上角X关闭按钮才可以按,此时如按的X,返回1:取消钮)
        /// </returns>
        public static int 提示框(IntPtr 父窗口句柄, string 提示内容, string 标题="友情提示", int 按钮类型=0,  int 超时时间毫秒=5000)
        {
            return MessageBoxTimeoutA(父窗口句柄, 提示内容, 标题, 按钮类型, 0, 超时时间毫秒) - 1;//第5个参数固定为0,返回值要-1(原因不明)
        }

调用示例 按钮事件

        private void button1_Click(object sender, EventArgs e)
        {
            int 按钮 = (int)numericUpDown_按钮类型.Value;

            int 返回值 = 提示框(this.Handle, "按钮值:"+ 按钮, "标题", 按钮, 3000);
            Console.WriteLine("返回值:" + 返回值);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值