winform中如何让“正在加载”的界面保持在前面啊? winform线程窗体焦点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 bdmh 于 2014-11-25 18:28:56 编辑 这个意见 非常中肯 且 友好。这里有个 地址:http://www.cnblogs.com/henryfan/archive/2008/07/22/1249056.html或者 百度: C# WinForm Loading组件 或者 你在 你的 等待窗体 —— 放一个 时钟,每隔 一秒,设置一次 TopMost = true; 网页中层遮罩的效果,不知道你有见到过没有?就是弹出一个div,显示在最前方,整个页面被遮罩你去qq空间,预览照片,就是这种效果。同样用到winform,如果不需要通用,就在窗体里加一个容器控件(比如panel),弹出的时候,设置窗体元素不可用如果需要通用,搞一个form,模态窗体弹出 我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。 我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。 用TopMast一次就行了,不过我不是这个意思,我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。 1楼已经告诉你了。 bringtofront 我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。 我回答过了,还是不行先topmost 然后 提示完成前取消topmost。 你需要的是 ShowDialog() 模态窗体 我回答过了,还是不行先topmost 然后 提示完成前取消topmost。也试过……还是不行…… 有时TopMost也不一定有效地,例如你两个窗体都是TopMost,那么最后一个就会是在最前端。例如打开任务管理器。如果非要这么做又没有办法,那就加一个Timer,然后做this.bringtofont。之前做一个界面屏蔽功能就是这么做的,连开了任务管理器都被我屏掉。 我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行” MessageBox.Show("等待窗体对像", "内容", "提示"); 我回答过了,还是不行先topmost 然后 提示完成前取消topmost。这样我也试过了,是不行的。 我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行”重复地NEW和关闭的试耗的资源太多了,我现在就是优化无效了只好显示一个等待界面的。我中途是调用了很多方法的,这些方法不是在一个类里的,在弹出确认框之后还有其它操作要做的,我不好每个显示的都关闭显示啊…… 有一个办法可以解决这个问题因为目前我没有找到弹出对话框有ShowDialog()方法,所以这样就有问题了。我的解决办法是新建一个Form(这里就叫MessageFrm),然后在上面放一个label和一个button,添加如下方法public void SetInfo(string info) { label1.Text = info; }然后button点击事件private void button1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; }把这个窗体的topmost设为True然后在等待界面调用这个来显示信息MessageFrm mf=new MessageFrm();mf.SetInfo("是否加载数据");if(mf.ShowDialog()==DiagloResult.OK){ //如果数据加载正确的逻辑 //MessageBox.Show("正确的逻辑");}还有就是你的等待窗体的TopMost要设为True 怎么设计一个类,能够监视这个类的任何属性是否被修改过(不需要修改所有属性的set函数的情况下) datagridview cellcontent 事件 根据不同的语言,代码变色如何实现,有现成的控件吗? 在系统中建立了一个process进程,如何把进程的输出流显示在textbox中 我的程序如下 谁知道怎么往App.config配置文件里写入吗?? C#拆分字符串的问题 如何打开一个新的窗口,关闭一个窗口? 校园的学习交流系统求教 winform做的小票打印为什么左边总有空白 这个是什么问题? 谁用.net搞过office编程? 求助!C#编译平台搭建问题
这个意见 非常中肯 且 友好。这里有个 地址:http://www.cnblogs.com/henryfan/archive/2008/07/22/1249056.html
或者 百度: C# WinForm Loading组件
或者 你在 你的 等待窗体 —— 放一个 时钟,每隔 一秒,设置一次 TopMost = true;
就是弹出一个div,显示在最前方,整个页面被遮罩你去qq空间,预览照片,就是这种效果。同样用到winform,如果不需要通用,就在窗体里加一个容器控件(比如panel),弹出的时候,设置窗体元素不可用
如果需要通用,搞一个form,模态窗体弹出
用TopMast一次就行了,不过我不是这个意思,我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。
我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。
有时TopMost也不一定有效地,例如你两个窗体都是TopMost,那么最后一个就会是在最前端。例如打开任务管理器。如果非要这么做又没有办法,那就加一个Timer,然后做this.bringtofont。
之前做一个界面屏蔽功能就是这么做的,连开了任务管理器都被我屏掉。
我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行”
我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行”重复地NEW和关闭的试耗的资源太多了,我现在就是优化无效了只好显示一个等待界面的。我中途是调用了很多方法的,这些方法不是在一个类里的,在弹出确认框之后还有其它操作要做的,我不好每个显示的都关闭显示啊……
因为目前我没有找到弹出对话框有ShowDialog()方法,所以这样就有问题了。
我的解决办法是新建一个Form(这里就叫MessageFrm),然后在上面放一个label和一个button,添加如下方法
public void SetInfo(string info)
{ label1.Text = info; }
然后button点击事件
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
把这个窗体的topmost设为True
然后在等待界面调用这个来显示信息
MessageFrm mf=new MessageFrm();
mf.SetInfo("是否加载数据");
if(mf.ShowDialog()==DiagloResult.OK)
{
//如果数据加载正确的逻辑
//MessageBox.Show("正确的逻辑");
}
还有就是你的等待窗体的TopMost要设为True