WPF C# SaveFileDialog - 如果备用文件夹中存在文件名,则重新打开对话框
WPF C# SaveFileDialog - Reopen Dialog if filename exists in alternate folder
我有一个 WPF 项目,其中有一个自动保存的 "Backup" 文件夹。如果用户在保存项目时选择了不同的名称,我会先检查备份文件夹并警告他们是否已经有同名的项目。如果是这样,我想重新打开 SaveFileDialog 并允许它们重命名。
SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = ".xml";
dlg.Filter = "xml documents (.xml)|*.xml|All Files (*.*)|*.*";
dlg.FileName = ProjectName;
bool? result = dlg.ShowDialog();
if (result == true)
{
string changedFilename = System.IO.Path.GetFileNameWithoutExtension(dlg.FileName);
if (changedFilename != CurrentProjectName)
{
if (ExistingProjectNames.Contains(changedFilename))
{
if (MessageBox.Show("Project name " + changedFilename + " already exists. Continue?", "Existing Project Name", MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.OK)
{
CurrentProjectName = changedFilename;
WriteFile(dlg.FileName);
}
else
{
//go back to beginning and open dialog again so user can rename
}
这看起来很简单,但我想不出最好的方法。我想到了递归和 switch 语句,但似乎我把它搞得太复杂了。还有更多 "standard" 的方法吗?
您可以做的一件事是在显示之前在对话框上注册 FileOk
事件。当用户按下对话框中的保存按钮时将调用事件处理程序,您可以选择设置 e.Cancel = true
以防止对话框关闭并允许用户做出其他选择。
另一种选择是在 while
循环中显示对话框,直到满足任何条件,导致它不断重新打开,直到用户执行他们需要做的事情。
我有一个 WPF 项目,其中有一个自动保存的 "Backup" 文件夹。如果用户在保存项目时选择了不同的名称,我会先检查备份文件夹并警告他们是否已经有同名的项目。如果是这样,我想重新打开 SaveFileDialog 并允许它们重命名。
SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = ".xml";
dlg.Filter = "xml documents (.xml)|*.xml|All Files (*.*)|*.*";
dlg.FileName = ProjectName;
bool? result = dlg.ShowDialog();
if (result == true)
{
string changedFilename = System.IO.Path.GetFileNameWithoutExtension(dlg.FileName);
if (changedFilename != CurrentProjectName)
{
if (ExistingProjectNames.Contains(changedFilename))
{
if (MessageBox.Show("Project name " + changedFilename + " already exists. Continue?", "Existing Project Name", MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.OK)
{
CurrentProjectName = changedFilename;
WriteFile(dlg.FileName);
}
else
{
//go back to beginning and open dialog again so user can rename
}
这看起来很简单,但我想不出最好的方法。我想到了递归和 switch 语句,但似乎我把它搞得太复杂了。还有更多 "standard" 的方法吗?
您可以做的一件事是在显示之前在对话框上注册 FileOk
事件。当用户按下对话框中的保存按钮时将调用事件处理程序,您可以选择设置 e.Cancel = true
以防止对话框关闭并允许用户做出其他选择。
另一种选择是在 while
循环中显示对话框,直到满足任何条件,导致它不断重新打开,直到用户执行他们需要做的事情。