c#自动关闭 MessageBox 弹出的窗口
创始人
2024-11-18 18:34:56
0

第一种方法:

原理:

1、我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的,只有关闭了MessageBox的窗口后才会运行下面的代码。

2、所以可以考虑在MessageBox前先增加一个用于“杀”掉MessageBox窗口的线程。因为需要在规定时间内“杀”掉窗口,所以我们可以直接考虑使用Timer类,然后调用系统API关闭窗口。

3、这个工作线程等待一定时间后开始查找消息对话框的窗口句柄,找到后调用SendMessage API 函数关闭这个消息对话框

4、这个只能在form框调用

具体实现:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Windows.Forms;  namespace ConsoleApp2 {     public partial class Form1 : Form     {          // 查找窗口         [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]         private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);          // 发送消息         [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]         private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);          // 关闭消息         private const uint WM_CLOSE = 0x0010;         public Form1()         {             InitializeComponent();         }         private void button1_Click(object sender, EventArgs e)         {             ShowMessage("测试测试", 2);         }          private void ShowMessage(string sMsg, int nSecondCount)         {             // 创建一个线程来执行倒计时操作             Thread thread = new Thread(() =>             {                 // 倒计时3秒                 Thread.Sleep(nSecondCount * 1000);                  // 关闭MessageBox                 if (InvokeRequired)                 {                     Invoke(new Action(() => { CloseMessageBox(); }));                 }                 else                 {                     CloseMessageBox();                 }             });              // 启动线程             thread.Start();              // 弹出MessageBox提示框,注意:这里的标题必须与下方查找关闭MessageBox里的标题一致。             MessageBox.Show(sMsg, "完成提示");         }          private void CloseMessageBox()         {             // 查找并关闭MessageBox窗口             IntPtr hwnd = FindWindow(null, "完成提示");//一致             if (hwnd != IntPtr.Zero)             {                 SendMessage(hwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);             }         }          private void Form1_SizeChanged(object sender, EventArgs e)         {          }          private void Form1_Load(object sender, EventArgs e)         {          }     } }  

第二种方法:

原理:

这个直接就是自己画一个form然后定时器关闭 ,博主已经画好尺寸了,和MessageBox的尺寸一致,可以直接调用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Windows.Forms;  namespace ConsoleApp2 {     class Program     {         static void Main(string[] args)         {             ShowTimedMessageWithYesNoButtons("123123123", 3000);            MessageBox.Show("123123123", "重新打印标签", MessageBoxButtons.YesNo);             Console.ReadLine();         }           public static DialogResult ShowTimedMessageWithYesNoButtons(string message, int timeoutMilliseconds)         {             Form form = new Form();             Label label = new Label();             Button yesButton = new Button();             Button noButton = new Button();             form.Text = "重新打印标签";              form.Size = new Size(300, 150);             label.Size = new Size(250, 50);             yesButton.Size = new Size(80, 30);             noButton.Size = new Size(80, 30);             form.StartPosition = FormStartPosition.CenterScreen; // 让表单在屏幕中央显示                // 设置标签位置在表单中央               label.Location = new Point((form.Width - label.Width) / 2, 20);              // 设置 “是” 按钮位置在表单中央底部               yesButton.Location = new Point((form.Width - yesButton.Width - noButton.Width - 10) / 2, form.Height - yesButton.Height - 50);              // 设置 “否” 按钮位置在表单中央底部               noButton.Location = new Point(yesButton.Location.X + yesButton.Width + 10, form.Height - noButton.Height - 50);               label.Text = message;             Font existingFont = new Font("Arial", 12, FontStyle.Regular);             label.Font = new Font(existingFont, FontStyle.Regular); /// 设置字体为微软雅黑,大小为12,正常样式                yesButton.Text = "是";             yesButton.Click += (sender, e) => form.DialogResult = DialogResult.Yes;             noButton.Text = "否";             noButton.Click += (sender, e) => form.DialogResult = DialogResult.No;              form.Controls.Add(label);             form.Controls.Add(yesButton);             form.Controls.Add(noButton);              Timer timer = new Timer();             timer.Interval = timeoutMilliseconds; // 设置定时器间隔为5秒               timer.Tick += (sender, e) =>             {                 form.DialogResult = DialogResult.None;                 form.Close();                 timer.Stop(); // 停止定时器                   timer.Dispose(); // 释放资源               };              form.FormClosing += (sender, e) =>             {                 if (form.DialogResult == DialogResult.None)                 {                     form.DialogResult = DialogResult.No; // 如果5秒后还未确认,则默认为“否”                   }             };              timer.Start(); // 启动定时器                form.ShowDialog();              if (form.DialogResult == DialogResult.Yes || form.DialogResult == DialogResult.No)             {                 Console.WriteLine(form.DialogResult);                 return form.DialogResult;             }             Console.WriteLine(DialogResult.No);             return DialogResult.No;         }      } }   

相关内容

热门资讯

冻结系统应用安卓4.5,揭秘安... 你有没有想过,你的安卓手机在运行某些应用时突然变得卡顿,甚至有时候还会出现冻结的情况?别急,今天就来...
终于找到“怎么购买微信炸金花房... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
两秒就懂!微信拼三张房卡自建房... 微信游戏中心:拼三张房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信拼三张房...
金花链接的房卡在哪里买的/哪里... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
两秒就懂!微信牛牛房间怎么弄,... 微信游戏中心:牛牛房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...
一分钟推荐“金花房卡一手货源/... 美猴王牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡...
两秒就懂!拼三张房卡购买联系方... 微信游戏中心:拼三张房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信拼三张房...
微信开牛牛房卡在哪里/微信炸金... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
两秒就懂!微信群牛牛房卡怎么买... 微信游戏中心:牛牛房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...
正版授权“可以一起创房的牛牛/... 新荣耀是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享...
旧版安卓系统转换器,轻松实现系... 你有没有想过,你的安卓手机上那套旧版系统,其实是个隐藏的宝藏呢?没错,就是那个让你习惯了,却又觉得有...
在哪里能买金花房卡/微信金花链... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
两秒就懂!斗牛如何开好友房间房... 微信游戏中心:斗牛房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
怎么购买微信炸金花房卡/炸金花... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
两秒就懂!微信玩炸金花房卡链接... 微信游戏中心:炸金花房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信炸金花房...
金花大厅链接房卡怎么弄的/哪里... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
两秒就懂!炸金花房卡如何购买,... 微信游戏中心:炸金花房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信炸金花房...
牛牛金花房卡模式代理/金花游戏... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
两秒就懂!拼三张房卡购买联系方... 微信游戏中心:拼三张房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信拼三张房...
微信链接斗牛房卡充值购买/微信... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...