首页 > 其他分享 >Winform MessageBox消息弹窗如何实现自动关闭

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

时间:2024-10-12 16:10:56浏览次数:9  
标签:IntPtr MessageBox AutoClosingMessageBox string System caption 关闭 弹窗 Winform

 使用了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();
        }

 

标签:IntPtr,MessageBox,AutoClosingMessageBox,string,System,caption,关闭,弹窗,Winform
From: https://www.cnblogs.com/xielong/p/18460751

相关文章

  • c# winform 高 dpi 自适应开发步骤
    1.在不启用dpiaware模式下开发2.启动dpiaware3.对有问题的控件使用 DpiHelper对定位和大小或者图像进行转换参见 解决DPI问题-VisualStudio(Windows)|MicrosoftLearn部分官方示例:若要从将在VisualStudio环境中运行的托管代码访问DPI帮助程序函数,请......
  • winform图片截取
    核查软件项目简介:主要分为这几个模块:图片列表、图片旋转、图片裁剪、图片替换、案卷导入、文件导入、检查页数、检查页号、案卷和文件的增删改查、图片核查、后台数据管控、随机参沙、修改统计、日志记录。如需源码使用,请联系:lilf0117以下是效果图展示: 1.图片列表左侧框是......
  • winform 同时打开多个窗体,获取当前操作(Active)的窗体.
    最近工作项目中使用winform开发时碰到这样一种场景,同时打开了多个Form页面且没有隐藏Hide(),需要获取当前正在操作Avtive的页面,在被窗体调用的控件中可以使用This.ParentForm获取,但如果是普通功能类则无法使用这种方式获取,使用Form窗体静态属性Form.ActiveForm直接取值,不止为何为Nu......
  • 界面控件DevExpress WinForms v24.1新版亮点 - 可访问性和UI自动化增强
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件v24.1日前已经全新发布,新......
  • C# WinForms 中嵌入 EXE 程序 打开外部的exe程序
    publicclassProcessEmbedder{//常量定义privateconstintGWL_STYLE=-16;//窗口样式privateconstintWS_VISIBLE=0x10000000;//可见窗口样式//导入user32.dll中的SetParent函数,用于设置窗口的父窗口[DllImport("user32.dll",......
  • 《大侠立志传》游戏闪退未响应提示“找不到cv210.dll”文件该怎么处理?大侠立志传游戏
    《大侠立志传》以其丰富的剧情和独特的玩法吸引着众多玩家。然而,启动游戏时若出现闪退未响应且提示“找不到cv210.dll”文件,着实令人苦恼。遇到这种情况该如何处理呢?下面为大家提供解决办法。cv210.dll的功能介绍cv210.dll是VisualC++RedistributablePackage的一部分,特别......
  • 《神之亵渎2》游戏启动时闪退未响应弹窗“找不到visa32.dll”文件该怎么修复?神之亵渎2
    《神之亵渎2》以其独特的艺术风格和深度的剧情备受玩家瞩目。但启动游戏时出现闪退未响应且弹窗提示“找不到visa32.dll”文件,实在令人困扰。那么,该如何修复这个问题呢?本篇将为大家带来《神之亵渎2》游戏启动时闪退未响应弹窗“找不到visa32.dll”文件该怎么修复的内容,感兴趣的......
  • 《星球大战绝地:幸存者》游戏启动时未响应弹窗“找不到mfc110u.dll”文件该怎么解决?星
    《星球大战绝地:幸存者》以其精彩的剧情和刺激的战斗吸引着众多玩家。然而,启动游戏时若出现未响应且弹窗提示“找不到mfc110u.dll”文件,着实令人苦恼。遇到这种情况该如何解决呢?本篇将为大家带来《星球大战绝地:幸存者》游戏启动时未响应弹窗“找不到mfc110u.dll”文件该怎么解决......
  • DevExpress WinForms中文教程:Data Grid - 如何完成数据输入验证?
    本教程介绍DevExpressWinForm的DataGrid控件是如何利用网格组件完成数据输入验证的。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是......
  • winforms基本操作-将datagridview内容保存为excel文件
    这里记录一下将winforms展示的datagridview,导出或保存为excel文件。这里说一下环境、版本信息:win系统:win11框架:winforms依赖:Microsoft.Office.Interop.Excel.net:8.0.401.netframework:4.8DataGridView对象为dataGridView1,然后添加一个按钮,绑定事件btnConfirm即可。priva......