C# 打开程序后立即保存文档

C# 打开程序后立即保存文档,c#,C#,请帮助,我正在尝试使程序在打开时立即使用窗口提示保存rtf文件,我尝试使用窗口激活事件,但当程序启动时,它确实会打开窗口保存为,但无论我按“保存”还是“取消”,保存文件对话框都会在循环中显示,无法通过。这是我用过的代码,但可能不是很好 private void Window_Activated(object sender, EventArgs e) { Microsoft.Win32.SaveFileDialog saveDlg = new Microsoft.Win32

请帮助,我正在尝试使程序在打开时立即使用窗口提示保存rtf文件,我尝试使用窗口激活事件,但当程序启动时,它确实会打开窗口保存为,但无论我按“保存”还是“取消”,保存文件对话框都会在循环中显示,无法通过。这是我用过的代码,但可能不是很好

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);
        }
    }

窗口激活发生在它成为前台窗口时,当您提示用户保存时,它会更改焦点,单击“确定”或“取消”时,它会将焦点更改回主窗口,从而触发窗口激活事件。这可能是一个无限循环吗?我没有测试它,但我想它可能会发生

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

您不能使用为此激活的窗口。它会在每次激活窗口时触发。下面是正在发生的事情:

你的应用程序启动。 已激活的窗口被执行。 您将显示saveDlg,这将停用您的窗口。 saveDlg将关闭,从而激活窗口。 转至步骤2 您需要添加一个在第一次执行Window_Activate时设置的标志,并在执行代码之前检查该标志,或者使用一个只运行一次的不同事件,如Load。

这样做

*>注:这将使用goto语句,其他人可能会争辩不同意

已使用,但仍受支持,只有在没有其他功能时才能使用 选择权*


你看过表单加载事件了吗?是的,我按照Jade的建议使用了Window_Load,它可以正常工作Jade,如果用户按cancel而不是save,我想给用户发送一条保存文件的信息,这样它就不能继续了?cancel from在哪里,是您创建的按钮还是save对话框中的按钮?我试着把您更新的代码,我在表单的错误列表中收到错误消息类型或名称空间名称“Forms”在名称空间“System”中不存在。Windows是否缺少程序集引用?好的,我使用了System.Windows.Forms SaveDialog再次查看我的更新,希望它现在能正常工作我不知道我是否做错了什么,但它仍然在表单上显示错误,我以前注意到,当我试着把这段代码放进去时,它总是向我显示错误。
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;
    }
}