代码段1:只能打开一个save ???请问是怎么回事??
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Show();
Form2 f1 = new Form2();
f1.Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.FormClosing += new FormClosingEventHandler(Form2_FormClosing);
Thread td = new Thread(DO);
td.Name = "from2";
td.Start();
}
private void DO()
{
Thread.Sleep(2000);
this.Invoke(new Action(() =>
{
this.Close();
}));
}
void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
System.Windows.Forms.SaveFileDialog sd = new SaveFileDialog();
sd.ShowDialog();
}
}
你双击了按钮后不要做任何操作。。。肯定是只能弹出一个save的。、。。
有一个奇怪的现象。。如果打开了两个form后。如果你用鼠标去选择后面的那一个form。。就能出现两个save。。。!!!
你虽然实例化两个form2.当然也会显示两个form2窗体.因为实例化两个对象,断点显示form2执行两次InitializeComponent();操作.但是当Form2_FormClosing触发时显示一个保存对话框,是因为两个对象调用同一个窗体的事件.
关键在于 sd.showdialog 这里没有指定对话框所属的窗体句柄,当前活动窗口为该对话框的所有者。因此在多线程情况下,可能会有多个窗体接收 DialogResult。。
你没有指定窗体句柄,关闭第一个Save时两个Form2实例都接收了DialogResult值,两个实例就全部Close了.
另外:经测试,你不设断点直接运行的话是能够打开两个Save的,两个对话框重叠在一起了,你可以把第一个Save拖动一下就看到第二个Save了
跟设置断点没有什么关系的。只能打开一个save(可以拷贝代码过去试试!)。。点了取消后。。实例化的后的两个form都关闭了。
那也得能弹出两个save才正常呀不是嘛!?