首页 新闻 搜索 专区 学院

winform 牛人进........

0
悬赏园豆:5 [已解决问题] 解决于 2013-05-06 22:25

代码段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();
        }
    }

KeVinDurant的主页 KeVinDurant | 初学一级 | 园豆:5
提问于:2013-04-01 22:51
< >
分享
最佳答案
0

收获园豆:5
kotl | 初学一级 |园豆:5 | 2013-04-03 16:27

你双击了按钮后不要做任何操作。。。肯定是只能弹出一个save的。、。。

 

有一个奇怪的现象。。如果打开了两个form后。如果你用鼠标去选择后面的那一个form。。就能出现两个save。。。!!!

KeVinDurant | 园豆:5 (初学一级) | 2013-04-04 12:30
其他回答(2)
0

你虽然实例化两个form2.当然也会显示两个form2窗体.因为实例化两个对象,断点显示form2执行两次InitializeComponent();操作.但是当Form2_FormClosing触发时显示一个保存对话框,是因为两个对象调用同一个窗体的事件.

伏草惟存 | 园豆:1420 (小虾三级) | 2013-04-02 00:06
0

关键在于 sd.showdialog  这里没有指定对话框所属的窗体句柄,当前活动窗口为该对话框的所有者。因此在多线程情况下,可能会有多个窗体接收 DialogResult。。

你没有指定窗体句柄,关闭第一个Save时两个Form2实例都接收了DialogResult值,两个实例就全部Close了.

另外:经测试,你不设断点直接运行的话是能够打开两个Save的,两个对话框重叠在一起了,你可以把第一个Save拖动一下就看到第二个Save了

S-Lyy | 园豆:257 (菜鸟二级) | 2013-04-02 10:13

跟设置断点没有什么关系的。只能打开一个save(可以拷贝代码过去试试!)。。点了取消后。。实例化的后的两个form都关闭了。

支持(0) 反对(0) KeVinDurant | 园豆:5 (初学一级) | 2013-04-04 12:27

那也得能弹出两个save才正常呀不是嘛!?

支持(0) 反对(0) KeVinDurant | 园豆:5 (初学一级) | 2013-04-04 12:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册