问题描述
各位高手,目标是弹出一个对话框,但希望不管有没有对该对话框进行操作,程序都继续执行下去。而使用MessageBox,必须操作对话框后,程序才继续执行。请问C#中有类似MessageBox功能,但不会阻塞的语句吗?如果没有,为什么呢?C#原理上无法实现?还是现实的编程中,不需要这种语句?还是仅仅是C#语言的缺少这个功能?(那为什么开发出这种语言的人后来不增加这个功能呢?)
解决方案
解决方案二:
MessageBox叫做“模态对话框”,它的设计目的就是阻塞用户操作,(它是25年前微软设计出来的概念)就相当最近几年出现的“遮罩”一样,目的都是刻意避免用户操作到其它东西。由于它是25年前的VisualBasicforDos1.0就有的设计(或许在微软更早的QuickBasic中就有了),因此在.netwinform、WPF中继承下来。微软的东西,你懂的,许多几十年前的程序还能当今的windows系统下运行,不像其它某些系统、开发环境总是在升级时骗粉丝、不兼容以前的东西。如果你需要一个非模态对话框,你完全可以创建一个自定义的Form然后Show这个窗口,这就OK了。因为没任何技术含量,所以.net完全用不着给你设计什么其它的MessageBox语句。以前的这个MessageBox甚至你都无需使用。
解决方案三:
你自定义一个对话Form,然后加载它,看看麻烦吗?
解决方案四:
嗯,我查了一下,MessageBox是从QBasic中就内置的(那时候)重要语句。我们理解微软开发工具从上个世纪80年代到2006年前的风格,就能比较好地理解它许多语法现象,特别是basic的风格影响了许多开发工具设计,微软从20年前就实行了“每日构造”技术管理方法。MessageBox就是如此。2006年左右微软换了ceo,之后发生了比较大的改变,出现了比较多的“自杀式”的趋势。
解决方案五:
自己写一个From窗口,然后Show出来就行了,在加个托管事件回掉。
解决方案六:
在.net中,你可以自定义一个漂亮的对话Form,然后使用任何Form都有的ShowDialog方法来模态显示它。你完全用不着几十年前的MessageBox。我不是说不让你使用MessageBox,恰恰相反,我说的是如何真正理解MessageBox。不要钻技术的牛角尖,而要理解它的历史。
解决方案七:
自己写个form,然后show你这个form,而不是showmessage
解决方案八:
楼上的大神说的都对..不过我也试过用多线程去解决这个问题...现在的关键是..你具体需求是什么==
解决方案九:
程序运行中总是弹出MessageBox,显然是很讨厌的(自定义的非模态窗口也是这样)如果你确实需要展示出一些中间结果,那么你可以放到状态栏中,或者在界面中开辟一个显示区域甚至可以直接对标题栏赋值
解决方案十:
请问自己写个debugForm,如何和自己的程序联系起来呢?例如我有一个Form1,里面一个按钮单击事件对应我一个自己写的类A。那么我想调试类A里面的语句,我新建的debugForm如何才能“插入”我的类A里面呢?我知道可以用事件,但我debug的时候想show一下类A的某个循环或者参数,如何反映到debugForm上呢?
解决方案十一:
这个需求的话直接用label显示这个message就好了
解决方案十二:
引用10楼shoppo0505的回复:
这个需求的话直接用label显示这个message就好了
顶一下
解决方案十三:
写一个Form专用于信息的显示。
解决方案十四:
各位高手,我的问题是:如何把自己做的debugForm和我写的某个类(叫做user吧)联系起来?例如,在Form1里面,我可以在某个按钮事件里面插入我写的user类的某个方法(实例化后)。然而,反过来是不行,我无法在user类中插入Form1的某个按钮事件,或者其它label事件等等。如果我自己写个debugForm,会不会像无法访问Form1一样,user类无法访问debugForm呢?classUser(){inti=1;这里要显示自己写的debugForm显示i应该怎么写?}
解决方案十五:
请问高手在哪呢?
解决方案:
没有人回复?
解决方案:
弄一个遮挡的提示框,冒泡显示3s就自动隐藏那种。
解决方案:
你弄一个LABEL显示一下就好了,或者弄一个普通的窗口也行,用Show()方法不会阻塞.
解决方案:
自己写个非模式窗口就可以了
解决方案:
自己NEW一个对话框出来啊,不要用模态不就不会阻塞了么