博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
延时并自动关闭MessageBox
阅读量:6423 次
发布时间:2019-06-23

本文共 2222 字,大约阅读时间需要 7 分钟。

信息提示框(MessageBox)是微软NET自带的一个用于弹出警告、错误或者讯息一类的“模式”对话框。此类对话框一旦开启,则后台窗体无法再被激活(除非当前的MessageBox被点击或者关闭取消)。那么如何使用程序模拟鼠标点击这个messageBox(关闭这个MessageBox)呢?答案是你在弹出这个messageBox之前先启用一个定时器,定时器内部不断向窗体发送Enter按钮用于模拟点击MsgBox的内容,同时主程序中弹出模式消息框代码如下(VS2012 RC 编写):

我们假设窗体上就一个Button,点击这个Button将弹出5个msgbox,同时每个msgbox将延时2秒后自动关闭。

[C#]

public partial class Form1 : Form    {        private System.Windows.Forms.Timer[] ts = new System.Windows.Forms.Timer[6];        public Form1()        {            InitializeComponent();                    }        void t_Tick(object sender, EventArgs e)        {            ((System.Windows.Forms.Timer)sender).Enabled = false;            SendKeys.SendWait("{Enter}");        }        private void button1_Click(object sender, EventArgs e)        {            Action act = new Action(() =>             {                for (int i = 0; i < 6; i++)                {                    ts[i] = new System.Windows.Forms.Timer();                    ts[i].Tick += t_Tick;                    ts[i].Interval = 2000;                    ts[i].Enabled = true;                    MessageBox.Show("MsgBox" + (i + 1));                    Thread.Sleep(2000);                }            });            act.BeginInvoke(null, null);        }    }

[VB.NET]

Public Partial Class Form1    Inherits Form    Private ts As System.Windows.Forms.Timer() = New System.Windows.Forms.Timer(5) {}    Public Sub New()        InitializeComponent()    End Sub    Private Sub t_Tick(sender As Object, e As EventArgs)        DirectCast(sender, System.Windows.Forms.Timer).Enabled = False        SendKeys.SendWait("{Enter}")    End Sub    Private Sub button1_Click(sender As Object, e As EventArgs)        Dim act As New Action(Sub()         For i As Integer = 0 To 5            ts(i) = New System.Windows.Forms.Timer()            AddHandler ts(i).Tick, AddressOf t_Tick            ts(i).Interval = 2000            ts(i).Enabled = True            MessageBox.Show("MsgBox" & (i + 1))            Thread.Sleep(2000)        NextEnd sub)        act.BeginInvoke(Nothing, Nothing)    End SubEnd Class

注意1:这里使用了“委托异步”是为了防止主线程被Thread延时导致假死的情况发生。

注意2:SendKeys这里必须使用SendWait,否则会抛出异常。

转载于:https://www.cnblogs.com/ServiceboyNew/archive/2012/07/02/2573406.html

你可能感兴趣的文章
oVirt JBAS server start failed, ajp proxy cann't server correct. ovirt-engine URL cann't open
查看>>
CDP WebConsole上线公告
查看>>
ubuntu下安装摄像头应用程序xawtv
查看>>
PostgreSQL 如何比较两个表的定义是否一致
查看>>
Ambari安装Hadoop集群
查看>>
WCF学习之旅—基于ServiceDebug的异常处理(十七)
查看>>
CLREX
查看>>
再也不用担心this指向的问题了
查看>>
PHP那些事儿
查看>>
使用putty远程连接linux
查看>>
【comparator, comparable】小总结
查看>>
Node 版本管理
查看>>
34、重分布配置实验之分发列表distribute-list
查看>>
命令模式-对象行为型
查看>>
VS2017配置、提高生产力、代码辨识度 (工欲善其事必先利其器)新手必备!
查看>>
[Phoenix] 七、如何使用自增ID
查看>>
路由基本配置(上)
查看>>
windows上传文件到linux乱码解决
查看>>
fpm打包zabbix-agent
查看>>
Windows Server 2016 DNS Policy Split-Brain 3
查看>>