现在有一个窗口,是ShowDialog出来的顶级窗口,现在想在这个窗口的按纽单击的时候弹出一副"正在处理,请稍等的动画",在事件处理结束之后自动关闭.1.最好不用进度条控件
2.我自己的做法:在单击按纽之后兴建一个线程,在线程中弹出一个Form,Form里面加载picturebox.
   这个方法一般时可以,只是在当前窗口为showdialog窗口的时候,新线程的动画窗口就被showdialog窗口覆盖了,有没有办法让动画窗口显示在showDialog窗口的上方不被覆盖?

解决方案 »

  1.   

    在顶级窗口中的按钮事件中添加:
    Form frm = new Form();
    frm.Owner=this;
    就行了
      

  2.   

    此方法不行,Form能出来,可是我在Form上动态加载的控件要到按纽事件执行完之后才会显示出来,我要窗口一出来就有控件
      

  3.   

    加load事件有什么用?单击按纽不走load事件的,我做的不是WEB的
      

  4.   

    你说怎么设计?问题的关键是能不能把ShowDialog的层次下降一个
      

  5.   

    public static void ShowWaitBar(Form fm, bool flg)
            {
                m_form = fm;
                m_flg = flg;            Thread t = new Thread(new ThreadStart(SetWaitSigh));
                t.Start();
            }private static void SetWaitSigh()
            {
                try
                {
                    Form temp = new Form();
                    temp.FormBorderStyle = FormBorderStyle.None;                if (m_flg)
                    {
                        //form.Cursor = Cursors.WaitCursor;
                        
                        //设置为等待状态
                        PictureBox pb = new PictureBox();
                        pb.SizeMode = PictureBoxSizeMode.AutoSize;
                        pb.Name = "pbUserWait";
                        pb.Image = Image.FromFile(@"D:\一期相关\ff.gif");                    //计算坐标
                        //int x = temp.Width / 2 - pb.Width / 2;
                        //int y = temp.Height / 2 - pb.Height / 2;                    //pb.Location = new Point(x, y);
                        temp.Height = pb.Height;
                        temp.Width = pb.Width;
                        temp.Controls.Add(pb);
                        //设置为最前端
                        temp.StartPosition = FormStartPosition.Manual;
                        temp.Location = new Point((m_form.Location.X + m_form.Width / 2-temp.Width/2), (m_form.Location.Y + m_form.Height / 2-temp.Height/2));
                        temp.Show();
                        temp.TopMost = true;
                    }
                    else
                    {
                        
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
      

  6.   

    你不是有两个对话框吗?
    一个是“ShowDialog出来的顶级窗口”,在点按钮的时候,显示“动画窗口”,是不是这样?
    在顶级窗口中的按钮事件中添加:
    动画窗口frm = new 动画窗口();
    frm.Owner=this;
    frm.Show();
      

  7.   

    你只要设置
    顶级窗口.Owner = 顶级窗口;
    就OK
      

  8.   

    将showdialog改用form不就得了~
      

  9.   

    写错
    动画窗口.Owner = 顶级窗口;
    就OK
      

  10.   

    在t.Start();后面阻塞主线程,等t线程执行完再释放主线程;
    用一个bool变量也可以做到
      

  11.   

    public static void ShowWaitBar(Form fm, bool flg)
            {
                m_form = fm;
                m_flg = flg;            Thread t = new Thread(new ThreadStart(SetWaitSigh));
                t.Start();
                while(isContinue){
                     Thread.Sleep(1000);
                }
            }
    private static bool isContinue=false;
    private static void SetWaitSigh()
            {
                try
                {
                    Form temp = new Form();
                    temp.FormBorderStyle = FormBorderStyle.None;                if (m_flg)
                    {
                        //form.Cursor = Cursors.WaitCursor;
                        
                        //设置为等待状态
                        PictureBox pb = new PictureBox();
                        pb.SizeMode = PictureBoxSizeMode.AutoSize;
                        pb.Name = "pbUserWait";
                        pb.Image = Image.FromFile(@"D:\一期相关\ff.gif");                    //计算坐标
                        //int x = temp.Width / 2 - pb.Width / 2;
                        //int y = temp.Height / 2 - pb.Height / 2;                    //pb.Location = new Point(x, y);
                        temp.Height = pb.Height;
                        temp.Width = pb.Width;
                        temp.Controls.Add(pb);
                        //设置为最前端
                        temp.StartPosition = FormStartPosition.Manual;
                        temp.Location = new Point((m_form.Location.X + m_form.Width / 2-temp.Width/2), (m_form.Location.Y + m_form.Height / 2-temp.Height/2));
                        temp.Show();
                        temp.TopMost = true;
                    }
                    else
                    {
                        
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }        }
      

  12.   

    错了
    public static void ShowWaitBar(Form fm, bool flg)
            {
                m_form = fm;
                m_flg = flg;            Thread t = new Thread(new ThreadStart(SetWaitSigh));
                t.Start();
                while(isContinue){
                     Thread.Sleep(1000);
                }
            }
    private static bool isContinue=true;
    private static void SetWaitSigh()
            {
                try
                {
                    Form temp = new Form();
                    temp.FormBorderStyle = FormBorderStyle.None;                if (m_flg)
                    {
                        //form.Cursor = Cursors.WaitCursor;
                        
                        //设置为等待状态
                        PictureBox pb = new PictureBox();
                        pb.SizeMode = PictureBoxSizeMode.AutoSize;
                        pb.Name = "pbUserWait";
                        pb.Image = Image.FromFile(@"D:\一期相关\ff.gif");                    //计算坐标
                        //int x = temp.Width / 2 - pb.Width / 2;
                        //int y = temp.Height / 2 - pb.Height / 2;                    //pb.Location = new Point(x, y);
                        temp.Height = pb.Height;
                        temp.Width = pb.Width;
                        temp.Controls.Add(pb);
                        //设置为最前端
                        temp.StartPosition = FormStartPosition.Manual;
                        temp.Location = new Point((m_form.Location.X + m_form.Width / 2-temp.Width/2), (m_form.Location.Y + m_form.Height / 2-temp.Height/2));
                        temp.Show();
                        temp.TopMost = true;
                    }
                    else
                    {
                        
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finnaly{
                isContinue = false;
    }
            }
      

  13.   

    temp.Show();改成 temp.ShowDialog();
      

  14.   

    把图片再ShowDialog()出来不行么?
      

  15.   

    你应该在按钮的Mouse_down事件里写处理吧