Winform MessageBox消息弹窗如何实现自动关闭

 使用了Windows API函数FindWindowSendMessage来查找消息框的窗口句柄并发送关闭消息

实现方法

 public class AutoClosingMessageBox
    {
        System.Threading.Timer _timeoutTimer;
        string _caption;
        AutoClosingMessageBox(string text, string caption, int timeout)
        {
            _caption = caption;
            _timeoutTimer = new System.Threading.Timer(OnTimerElapsed,
                null, timeout, System.Threading.Timeout.Infinite);
            // 显示消息框
            MessageBox.Show(text, caption);
        }

        public static void Show(string text, string caption, int timeout)
        {
            new AutoClosingMessageBox(text, caption, timeout);
        }

        void OnTimerElapsed(object state)
        {
            IntPtr mbWnd = FindWindow(null, _caption);
            if (mbWnd != IntPtr.Zero)
                SendMessage(mbWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);

            _timeoutTimer.Dispose();
        }

        const int WM_CLOSE = 0x0010;

        [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
    }

调用方法

AutoClosingMessageBox.Show("这是一条自动关闭的消息", "消息标题", 3000); // 3000毫秒后关闭

实现效果

自己建一个winform窗体,拉一个button控件,在按钮的实现方法写入调用代码

 如下按钮的实现方法

        /// <summary>
        /// 清空扫描结果事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnClear_Click(object sender, EventArgs e)
        {
            AutoClosingMessageBox.Show("这是一条自动关闭的消息", "消息标题", 3000); // 3000毫秒后关闭
            //清空输入框并获取焦点
            clearScanCode();
        }

    
        /// <summary>
        /// 清空输入框
        /// </summary>
        private void clearScanCode()
        {
            this.txtScanCode.Text = "";
            this.txtScanCode.Focus();
        }

 无法插入视频,改成运行的截图

 

 

posted @ 2024-10-12 16:20  小小邪  阅读(16)  评论(0编辑  收藏  举报