请帮助,我试图在程序打开后立即提示用窗口保存rtf文件,我尝试使用Window_Activated
事件但是当程序启动时,它会打开窗口保存为但是它如果我按下Save
或Cancel
并不重要,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);
}
}
答案 0 :(得分:0)
当窗口变为前景窗口时,当您提示用户保存时,它会更改焦点,单击确定或取消将焦点更改回主窗口,然后启动Window_Activated
事件。这可能是一个无限循环吗?我没有测试它,但我猜它可能发生。
编辑:我建议您使用另一个事件,也许是在表单加载时?
答案 1 :(得分:0)
您无法使用Window_Activated
(显然)。每次激活窗口时都会触发它。。以下是发生的事情:
Window_Activated
已执行。saveDlg
,这会停用您的窗口。saveDlg
关闭,会激活您的窗口。您需要添加第一次执行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;
}
}