解决方案 »

  1.   

    本帖最后由 bdmh 于 2014-11-25 18:28:56 编辑
      

  2.   


    这个意见 非常中肯 且 友好。这里有个 地址:http://www.cnblogs.com/henryfan/archive/2008/07/22/1249056.html
    或者 百度:        C# WinForm Loading组件
      

  3.   


    或者 你在 你的 等待窗体 —— 放一个 时钟,每隔 一秒,设置一次 TopMost = true;
      

  4.   

    网页中层遮罩的效果,不知道你有见到过没有?
    就是弹出一个div,显示在最前方,整个页面被遮罩你去qq空间,预览照片,就是这种效果。同样用到winform,如果不需要通用,就在窗体里加一个容器控件(比如panel),弹出的时候,设置窗体元素不可用
    如果需要通用,搞一个form,模态窗体弹出
      

  5.   

    我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。
      

  6.   

    我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。
      

  7.   


    用TopMast一次就行了,不过我不是这个意思,我也试过用TopMost,不过这样的话连弹出确认框的时候确认框都在后面了……我是想让弹出框在最前面,然后才到等待的窗体,最后才是原来的窗体。
      

  8.   

    1楼已经告诉你了。 bringtofront
      

  9.   


    我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。
      

  10.   

    我回答过了,还是不行先topmost 然后  提示完成前取消topmost。
      

  11.   

    你需要的是  ShowDialog()  模态窗体
      

  12.   

    我回答过了,还是不行先topmost 然后  提示完成前取消topmost。也试过……还是不行……
      

  13.   


    有时TopMost也不一定有效地,例如你两个窗体都是TopMost,那么最后一个就会是在最前端。例如打开任务管理器。如果非要这么做又没有办法,那就加一个Timer,然后做this.bringtofont。
    之前做一个界面屏蔽功能就是这么做的,连开了任务管理器都被我屏掉。
      

  14.   


    我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行”
      

  15.   

    MessageBox.Show("等待窗体对像", "内容", "提示");
      

  16.   

    我回答过了,还是不行先topmost 然后  提示完成前取消topmost。这样我也试过了,是不行的。
      

  17.   


    我现在就是这样做的,只是现在的等待窗体一直在前面,连弹出的确认框也显示在后面了,我是要让等待窗体在确认框与操作窗体之间的,而如果不设TopMost就会在弹出确认框后失去焦点,一直在操作窗体的后面了。你这里 “正在执行”的时候“弹出确认”,是表示“执行完毕”吗? 如果是你"弹出确认之前就把你“正在执行。。”的框先关闭不就好了,如果是“正在执行”的过程中需要弹出框“确认”,然后还是要继续显示“正在执行”,那能不能也先把“正在执行。。”框关闭,等“执行完确认”以后再重新显示“正在执行”重复地NEW和关闭的试耗的资源太多了,我现在就是优化无效了只好显示一个等待界面的。我中途是调用了很多方法的,这些方法不是在一个类里的,在弹出确认框之后还有其它操作要做的,我不好每个显示的都关闭显示啊……
      

  18.   

    有一个办法可以解决这个问题
    因为目前我没有找到弹出对话框有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