打开程序后立即保存文档

时间:2013-12-20 00:53:27

标签: c#

请帮助,我试图在程序打开后立即提示用窗口保存rtf文件,我尝试使用Window_Activated事件但是当程序启动时,它会打开窗口保存为但是它如果我按下SaveCancel并不重要,SaveFileDialog会一直显示在循环中并且无法通过。这是我使用的代码,但可能甚至不好。

private void Window_Activated(object sender, EventArgs e)
    {
        Microsoft.Win32.SaveFileDialog saveDlg = new Microsoft.Win32.SaveFileDialog();
        saveDlg.DefaultExt = ".rtf";
        saveDlg.Filter = "RTF Documents (.rtf)|*rtf";

        Nullable<bool> rezultat = saveDlg.ShowDialog();
        if (rezultat == true)
        {
            string filename = saveDlg.FileName;
            System.IO.File.Create(filename);
        }
    }

3 个答案:

答案 0 :(得分:0)

当窗口变为前景窗口时,当您提示用户保存时,它会更改焦点,单击确定或取消将焦点更改回主窗口,然后启动Window_Activated事件。这可能是一个无限循环吗?我没有测试它,但我猜它可能发生。

编辑:我建议您使用另一个事件,也许是在表单加载时?

答案 1 :(得分:0)

您无法使用Window_Activated(显然)。每次激活窗口时都会触发它。。以下是发生的事情:

  1. 您的应用已启动。
  2. Window_Activated已执行。
  3. 您会显示saveDlg,这会停用您的窗口。
  4. saveDlg关闭,会激活您的窗口。
  5. 转到步骤#2
  6. 您需要添加第一次执行Window_Activated时设置的标志,并在执行代码之前检查它,或使用仅运行一次的其他事件(如Load

答案 2 :(得分:0)

这样做

* GT;注意:这将使用goto语句,其他人可能认为不

  

使用它但它仍然受支持,只有在没有其他的情况下才能使用   选项*

private void Window_Load(object sender, EventArgs e)
{
    System.Windows.Forms.SaveFileDialog saveDlg = new System.Windows.Forms.SaveFileDialog();
    saveDlg.DefaultExt = ".rtf";
    saveDlg.Filter = "RTF Documents (.rtf)|*rtf";

    RetHere:
    if (saveDlg.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
    {        
        string filename = saveDlg.FileName;
        System.IO.File.Create(filename);
    }
    else {
       System.Windows.Forms.MessageBox.Show("Your message here!", "Save", System.Windows.Forms.MessageBoxButtons.OK);
       goto RetHere;
    }
}