社区
C#
帖子详情
请问有没有办法让messagebox对话框自动销毁?
maixiaofeng
2007-08-01 11:14:47
程序在启动的时候有个messagebox.show弹出的对话框,如果不点确定,程序就无法继续下去。现在想设置一个时间,比如10秒,如果10秒后还没有人点确定,则对话框自己返回确定,并自己销毁。有办法么?
...全文
809
7
打赏
收藏
请问有没有办法让messagebox对话框自动销毁?
程序在启动的时候有个messagebox.show弹出的对话框,如果不点确定,程序就无法继续下去。现在想设置一个时间,比如10秒,如果10秒后还没有人点确定,则对话框自己返回确定,并自己销毁。有办法么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kingthy
2007-08-01
打赏
举报
回复
C# 代码,如果要测试,则新建一个Winform项目.然后在窗口里添加一个按钮.并将此按钮的Click事件指向Button_Click方法即可.
代码如下:
private void Button_Click(object sender, System.EventArgs e)
{
StartKiller();
MessageBox.Show("这里是MessageBox弹出的内容","MessageBox");
MessageBox.Show("这里是跟随运行的窗口","窗口");
}
private void StartKiller()
{
Timer timer = new Timer();
timer.Interval = 10000; //10秒启动
timer.Tick += new EventHandler(Timer_Tick);
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
KillMessageBox();
//停止计时器
((Timer)sender).Stop();
}
private void KillMessageBox()
{
//查找MessageBox的弹出窗口,注意对应标题
IntPtr ptr = FindWindow(null,"MessageBox");
if(ptr != IntPtr.Zero)
{
//查找到窗口则关闭
PostMessage(ptr,WM_CLOSE,IntPtr.Zero,IntPtr.Zero);
}
}
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet=CharSet.Auto)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
public const int WM_CLOSE = 0x10;
effun
2007-08-01
打赏
举报
回复
昨天刚好在CodeProject上看到一个这样的解决办法,不过是用MFC写的,代码如下:
void CMsgBox::MessageBox(CString sMsg, CString sCaption, UINT nSleep,
UINT nFlags, bool bAutoClose)
{
// Save the caption, for finding this
// message box window later
m_Caption = sCaption;
// If auto close then, start the timer.
if(bAutoClose)
SetTimer(100, nSleep, NULL);
// Show the message box
CWnd::MessageBox(sMsg, sCaption, nFlags);
}
void CMsgBox::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
BOOL bRetVal = false;
// Find the message box window using the caption
CWnd* pWnd = FindWindow(NULL, m_Caption);
if(pWnd != NULL)
{
// Send close command to the message box window
::PostMessage(pWnd->m_hWnd, WM_CLOSE, 0, 0);
}
// Kill the timer
KillTimer(100);
CWnd::OnTimer(nIDEvent);
}
大概原理是在程序里设置一个计时器,弹出MessageBox前开始计时,当计时器到点以后,用FindWindow找到MessageBox的句柄,然后向这个窗口发送一个WM_CLOSE消息。
http://www.codeproject.com/useritems/AutoCloseMessageBox.asp
wyz_001
2007-08-01
打赏
举报
回复
重写一个。类似的。
灰太狼
2007-08-01
打赏
举报
回复
同意,自己写个窗体。MessageBox本身是调用windows的API,所以不能在此基础上编程了。所以自己写个窗体最简单
yaoshuwen
2007-08-01
打赏
举报
回复
继承。。。
破碎的脸
2007-08-01
打赏
举报
回复
最好的办法是自己写一个类似的窗体。那样就可以自动销毁了。。
maixiaofeng
2007-08-01
打赏
举报
回复
完美!
谢谢!
python3
messagebox
a
python3
messagebox
a
MessageBox
A.py
MFC多窗口例程
No.4 简单的MFC多
对话框
演示程序 “MultiDialog” 演示如何在工程中拥有多个
对话框
,及如何在一个
对话框
中调用另一个
对话框
。 重点:1、多个
对话框
类的建立;2、
对话框
的模式(Modal)调用方法;3、Spin控件的使用。 新建一个基于
对话框
的MFC工程, 通过菜单"Insert>>Resource"打开添加资源
对话框
, 在其中选择Dialog后点击New创建一个新的
对话框
按Ctrl+W打开ClassWizard,系统会提示刚才创建了一个新的
对话框
资源,是否建立对应的类, 选择建立,然后在New Class窗口中Class Name栏输入它的名称:CSubClass1, 确定后系统会
自动
生成SubClass1.h和SubClass1.cpp并加入工程中,其中有已经创建好的CSubClass1的类的基本代码。 把这个
对话框
的Caption属性改为“难度选择”,在它上面画三个Radio“简单”、“标准”、“困难”, 并建立相关联的变量m_Option1。(要注意的是在ClassWizard中注意Class Name中应该选CSubClass1而不是之前的主
对话框
类) 按照相同方法建立第二个新
对话框
,类名“CSubClass2”,Caption为“关卡选择”。 在上面画一个Edit和一个Spin,注意先画Edit后画Spin,将Spin的Auto buddy和Set buddy integer勾上。 按Ctrl+W打开ClassWizard,为Edit建立关联变量,不过注意是int型而不是CString型, 也为Spin建立关联变量m_Spin1,注意这次是Control型变量CSpinButtonCtrl。 下面为这两个
对话框
添加代码。 双击“难度选择”
对话框
的OK按钮,建立
对话框
的OnOK映射。 在其中加入(在CDialog::OnOK();之前): UpdateData(TRUE); if ((m_Option1>2) ||(m_Option1<0)) {
MessageBox
("错误的选择!","提示",MB_OK); return; } 下面对“关卡选择”
对话框
添加初始化代码, 由于关卡的有效值只有1到6,因此需要在初始化时设置Spin控件的有效值范围。 按Ctrl+W打开ClassWizard,在左侧列表选择这个
对话框
类CSubDialog2, 在右侧列表中选择WM_INITDIALOG,点击右边的“Add Function...”按钮, 接着点击右边的“Edit Code”按钮,在其中中加入(在CDialog::OnInitDialog()那句之后,在return TRUE那句之前): m_Spin1.SetRange(1,6); m_Text1=1; m_Spin1.SetPos(1); 其中CSpinButtonCtrl::SetRange()函数的作用是设置和他关联的Spin控件的范围,两个参数分别是下界和上界。 而CSpinButtonCtrl::SetPos()是设定Spin的当前位置。 两个新的
对话框
都已建立完毕,下来是如何在主
对话框
中使用的问题。 首先,两个新
对话框
都有各自的类,分别在SubDialog1.h和SubDialog2.h中有定义。(类的细节则在对应的cpp中定义) 因此,主
对话框
想要调用这两个新
对话框
,需要先包含这两个头文件, 在你要使用的地方(本例是MultiDialogDlg.cpp中)文件前面加上 #include "SubDialog1.h" #include "SubDialog2.h" 然后在想要调用的地方就可以使用了。 本例中,首先为主窗口的两个Edit建立CString型关联变量m_Text1和m_Text2, 然后在两个按钮的消息映射函数中分别加入: CSubDialog1 dialog1; //定义CSubDialog1型
对话框
的一个新对象 dialog1.DoModal(); //使用“模式”调用,显示
对话框
m_Text1.Format("%d",dialog1.m_Option1); //此句在上面
对话框
没有关闭前不会执行到 UpdateData(FALSE); 和 CSubDialog2 dialog1; dialog1.DoModal(); m_Text2.Format("%d",dialog1.m_Text1); UpdateData(FALSE); 其中第一句均为定义
对话框
新实例的语句,定义一个你想要的类型的
对话框
。 第二句是通过调用CDialog::DoModal()方法,来显示这个
对话框
,并进入“模式”(Modal)状态 在“模式”状态,当子
对话框
没有关闭之前,调用它的父
对话框
不能被响应, 并且其语句执行会停留在刚才的DoModal语句上等待,直到子
对话框
关闭才接着执行下一个语句。 第三第四句将子
对话框
得到的数据(即类的成员变量)显示在父
对话框
的Edit上。 四句执行完后退出该函数,这时刚才定义的CSubDialog1等
对话框
类变量被
销毁
,因此创建的话框也被
销毁
。
C# for CSDN 乱七八糟的看不懂
没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 型、接口类型、委托类型和数组类型。 变量的类型声明 变量的类型声明 每个变量必须预先声明其类型。如 int a; int b = 100; float j = 4.5; string s1; 用 object 可以表示所有的类型。 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 字符串类型; 字符串是 Unicode 字符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例 object o = null; 范围 string sbyte short int long string s = "hello"; sbyte val = 12; short val = 12; int val = 12; long val1 = 12; -128 到 127 -32,768 到 32,767 -2,147,483,648 2,147,483,647 -9,223,372,036,854,775,808 到 第1页 C#(WINFORM)学习 long val2 = 34L; 到 9,223,372,036,854,775,807 byte ushort 8 位无符号整型 16 位无符号整型 byte val1 = 12; ushort val1 = 12; uint val1 = 12; uint 32 位无符号整型 uint val2 = 34U; ulong val1 = 12; ulong val2 = 34U; ulong 64 位无符号整型 ulong val3 = 56L; ulong val4 = 78UL; float 单精度浮点型 float val = 1.23F;7 位 double val1 = 1.23; double 双精度浮点型 double val2 = ±5.0 × 10?324 ±1.7 × 10 308 0 到 255 0 到 65,535 0 到 4,294,967,295 0 到 18,446,744,073,709,551,615 ±1.5 × 10?45 ±3.4 × 10 38 到 到 4.56D;15-16 布尔型;bool 值或为 真或为假 字符类型;char 值是 一个 Unicode 字符 精确的小数类型, 具有 28 个有效数字 bool val1 = true; bool val2 = false; char val = 'h'; decimal val = bool char decimal DateTime ±1.0 × 10?28 ±7.9 × 10 28 到 1.23M;28-29 变量转换 简单转换: float f = 100.1234f; 可以用括号转换: short s = (short)f 也可以利用 Convert 方法来转换: string s1; s1=Convert.ToString(a);
MessageBox
.Show(s1); 常用 Convert 方法有: 第2页 C#(WINFORM)学习 C# Convert.ToBoolean Convert.ToByte Convert.ToChar Convert.ToDateTime Convert.ToDecimal Convert.ToDouble Convert.ToInt16 Convert.ToInt32 Convert.ToInt64 Convert.ToSByte Convert.ToSingle Convert.ToString Convert.ToUInt16 Convert.ToUInt32 Convert.ToUInt64 备注 Math 类 常用科学计算方法: C# Math.Abs Math.Sqrt Math.Ro
MFC
自动
关闭弹出的
MessageBox
对话框
方法
首先,创建定时器和弹出
MessageBox
: void CTestDlg::Test() { //启动定时器 SetTimer(111,1000,NULL); int ret =
MessageBox
("Hello World", "MyTestBox", MB_YESNO); if(ret == IDYES) ...
MessageBox
弹不出
对话框
为什么theapApp中写的
messagebox
不会显示? 见了一个基于
对话框
的MFC程序,整个程序就一个
对话框
,MFC
自动
在应用程序的initisal里面生成了 C/C++ code ? 1 2 3 4 5 6 7 8 9 CmainDlg dlg; m_pMain
C#
110,570
社区成员
642,565
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章