社区
C#
帖子详情
在form 的activated event 里面使用messagebox的问题
blucecat
2004-03-25 11:00:29
一段最简单的代码:
private void Form1_Activated(object sender, System.EventArgs e)
{
MessageBox.Show("ABC");
}
为什么运行后点messagebox的确定按钮messagebox会反复弹出?谢谢回答!
...全文
66
11
打赏
收藏
在form 的activated event 里面使用messagebox的问题
一段最简单的代码: private void Form1_Activated(object sender, System.EventArgs e) { MessageBox.Show("ABC"); } 为什么运行后点messagebox的确定按钮messagebox会反复弹出?谢谢回答!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blucecat
2004-03-29
打赏
举报
回复
sumtec(Psydian) :
实在对不起,都怪我没说清楚,这下对了,非常感谢你的不厌其烦
sumtec
2004-03-28
打赏
举报
回复
晕!你完全没有搞清楚什么是Active,Active是激活的意思!如果你只想第一次加载的时候显示对话框,那么就应该用Load事件,如果你想在显示出来的时候弹出对话框,那就应该用VisibleChanged事件。
你本身的问题没有问清楚,又用错东西了,那我回答的也自然不是你想要的咯。
你应该仔细研究一下,Form有一些什么事件,分别是什么意思,不要随便乱用。
blucecat
2004-03-28
打赏
举报
回复
我没断章取义呀,只是你起初的代码没有this.Activate()嘛
现在对了,不用什么this.focus了
busyActivating = false;这句还是应该去掉,否则在form第二次actived的时候,messagebox又会弹出,这是我不想看到的
blucecat
2004-03-25
打赏
举报
回复
最后一句busyActivating = false;必须删掉,否则busyActivating毫无作用
现在的问题是MessageBox.Show("ABC")后点确定form居然要失去焦点,我不得不在这之后加一句this.focus();这样的效果真是糟透了(form会非常厉害的闪烁一下)
blucecat
2004-03-25
打赏
举报
回复
非常谢谢 sumtec(Psydian) :
我是想在from显示出来后给一个messagebox,我觉得应该是在这个事件里面实现,form got focus应该是Enter event吧?
要实现我的想法没有其他办法了吗?
sumtec
2004-03-25
打赏
举报
回复
不知道你是想验证Activated是否可用呢?还是就是要弹出一个对话框?如果非要弹出一个对话框,那么:
private bool busyActivating;
private void Form1_Activated(object sender, System.EventArgs e)
{
// 这几句话放在开头
if (busyActivating)
{
return;
}
busyActivating = true;
// 其它的什么代码(不弹出窗口)
...
// 凡是弹出窗口的地方,加上下面这两句话。
MessageBox.Show("ABC");
Application.DoEvents();
// 这句话放在最后面
busyActivating = false;
}
sumtec
2004-03-25
打赏
举报
回复
当然,因为你弹出了MessageBox,这个窗口就失去焦点了,等你点“确定”之后,窗口再次被激活,于是就再次进入这个事件,然后再次弹出MessageBox……
sumtec
2004-03-25
打赏
举报
回复
好了,这个经过测试的了,你自己是一下吧,敬请完全拷贝,不要漏了任何一句,尤其是DoEvents();
private bool busyActivating;
private void Form1_Activated(object sender, System.EventArgs e)
{
// 这几句话放在开头
if (busyActivating)
{
return;
}
busyActivating = true;
this.Activate();
// 其它的什么代码(不弹出窗口)
// 这个例子就不写什么罗嗦的代码了。
// 凡是弹出窗口的地方,加上下面这两句话。
MessageBox.Show("ABC");
Application.DoEvents();
// 再弹出一次,保证没问题!
MessageBox.Show("123");
Application.DoEvents();
// 这句话放在最后面
busyActivating = false;
}
sumtec
2004-03-25
打赏
举报
回复
楼主:
请你仔细看看我给你的代码,我想你很可能是断章取义了。你在MessageBox后面没有写Application.DoEvents(); 吧?后面的那个busyActivating = false; 是必需的,否则下一次选中这个窗口就不会显示对话框了!
我想你可能遇到的另外一个问题是,第一次显示这个窗口的时候会失去焦点,这个问题可能是.NET Framework的一个瑕疵,这个问题我在研究一下。
jkflyfox
2004-03-25
打赏
举报
回复
如果只想验证一次Activated事件,可以
private bool bFlag=true;
private void Form1_Activated(object sender, System.EventArgs e)
{
if( bFlag==true)
{
DialogResult dr=MessageBox.Show("Good");
if(dr==DialogResult.OK) bFlag=false;
}
}
不过也会点确定后窗口失去焦点,如楼上所说。要加thi.Focus();
jkflyfox
2004-03-25
打赏
举报
回复
如果是开始时显示一次,load事件就可以的。
如果要获得焦点就显示,Enter事件好像不行。
Win
Form
Event
:
Activated
Dead Cycle
本文探讨了在 Win
Form
中
Activated
事件的特殊行为,特别是如何避免事件处理函数的无限循环调用,并提供了具体的代码示例。
Win
Form
s中实现MVVM模式的轻量级移植方案
本文提出一种零第三方依赖、基于原生.NET API的Win
Form
s MVVM轻量级移植方案,核心包括ViewModelAttribute配置开关、IView接口解耦、Win
Form
sCommand线程安全命令封装及手动绑定机制。方案强调松耦合、可测试性与可弃用性,支持遗留系统渐进式升级,解决INotifyPropertyChanged集成、跨线程UI更新、反射绑定性能等关键
问题
。
C# Win
Form
s 多窗体项目实战:3种窗体交互方法与启动项设置
本文详解C# Win
Form
s多窗体项目的三种核心交互方式:Show非模态显示、ShowDialog模态对话框及事件驱动松耦合通信;并涵盖动态启动窗体设置、启动参数传递、Splash Screen实现等启动项配置技巧;同时涉及MDI界面构建与窗体生命周期关键事件管理,聚焦桌面应用架构设计与稳定性保障。
政府科技管理者如何利用区域科技创新数智大脑实现精准招商?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
ГОСТ 32134.12-2013.pdf
ГОСТ 32134.12-2013.pdf
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章