C#窗体MessageBox显示自动消失

【说明】引自:http://xgli0910.blog.163.com/blog/static/4696216820127601455221/

【前言】 MessageBox提示框一般需要手动关闭,对于简单的信息提示,每次还要去关闭很麻烦。于是想到怎样能让MessageBox显示一段时间后自动关闭。

【代码】

 1 C#窗体MessageBox显示自动消失
 2 
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Text;
 6 using System.Runtime.InteropServices;
 7 using System.Windows.Forms;
 8 
 9 namespace pdaTraceInfoPlat.beans
10 {
11     class MessageBoxTimeOut
12     {
13         private string _caption;
14 
15         public void Show(string text, string caption, int timeout)
16         {
17             this._caption = caption;
18             StartTimer(timeout);
19             MessageBox.Show(text, caption);
20         }
21 
22         private void StartTimer(int interval)
23         {
24             Timer timer = new Timer();
25             timer.Interval = interval;
26             timer.Tick += new EventHandler(Timer_Tick);
27             timer.Enabled = true;
28         }
29 
30         private void Timer_Tick(object sender, EventArgs e)
31         {
32             KillMessageBox();
33             //停止计时器
34             ((Timer)sender).Enabled = false;
35         }
36 
37         [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
38         private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
39 
40         [DllImport("user32.dll", CharSet = CharSet.Auto)]
41         public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
42 
43         public const int WM_CLOSE = 0x10;
44 
45         private void KillMessageBox()
46         {
47             //查找MessageBox的弹出窗口,注意对应标题
48             IntPtr ptr = FindWindow(null, this._caption);
49             if (ptr != IntPtr.Zero)
50             {
51                 //查找到窗口则关闭
52                 PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
53             }
54         }       
55     }
56 }

【注意】  windows系统中,DllImport应为user32.dll,即[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)],

而不是   [DllImport("coredll.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]

posted @ 2014-01-15 20:40  大漠孤烟~  阅读(5613)  评论(0编辑  收藏  举报