现在有一个窗口,是ShowDialog出来的顶级窗口,现在想在这个窗口的按纽单击的时候弹出一副"正在处理,请稍等的动画",在事件处理结束之后自动关闭.1.最好不用进度条控件
2.我自己的做法:在单击按纽之后兴建一个线程,在线程中弹出一个Form,Form里面加载picturebox.
这个方法一般时可以,只是在当前窗口为showdialog窗口的时候,新线程的动画窗口就被showdialog窗口覆盖了,有没有办法让动画窗口显示在showDialog窗口的上方不被覆盖?
2.我自己的做法:在单击按纽之后兴建一个线程,在线程中弹出一个Form,Form里面加载picturebox.
这个方法一般时可以,只是在当前窗口为showdialog窗口的时候,新线程的动画窗口就被showdialog窗口覆盖了,有没有办法让动画窗口显示在showDialog窗口的上方不被覆盖?
Form frm = new Form();
frm.Owner=this;
就行了
{
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;
}
}
一个是“ShowDialog出来的顶级窗口”,在点按钮的时候,显示“动画窗口”,是不是这样?
在顶级窗口中的按钮事件中添加:
动画窗口frm = new 动画窗口();
frm.Owner=this;
frm.Show();
顶级窗口.Owner = 顶级窗口;
就OK
动画窗口.Owner = 顶级窗口;
就OK
用一个bool变量也可以做到
{
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;
} }
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;
}
}