2013-08-20 5 views
0

Мне поразило создание диалогового окна сохранения файла. Я сделал все, но я хочу показать диалоговое окно, когда я пытаюсь сохранить уже существующий файл, с опциями переопределить, отменить или нет. Когда пользователь нажимает «Нет», я хочу, чтобы saveFodlerDialog снова отображался и повторял процесс. Но я не знаю, как его реализовать.Сохранить диалог подтверждения файла

Я вставив соответствующий код ниже:

private void New_Project(object sender, RoutedEventArgs e) 
    { 

     var saveFolderDlg = new System.Windows.Forms.FolderBrowserDialog(); 

     System.Windows.Forms.DialogResult dlgResult = saveFolderDlg.ShowDialog(); 

     if (dlgResult == System.Windows.Forms.DialogResult.OK) 
     { 

      saveFolderDlg.RootFolder = Environment.SpecialFolder.Desktop; 
      saveFolderDlg.ShowNewFolderButton = true; 
      string projectPath = saveFolderDlg.SelectedPath; 
      string prjFileName = System.IO.Path.GetFileName(projectPath); 
      string newPath = System.IO.Path.Combine(projectPath, prjFileName); 

      if (!System.IO.File.Exists(newPath+".rnd")) 
      { 
       CreateNewProejct(projectPath);//works fine 
      } 
      else 
      { 
       string msgBoxTxt = "Project already exists, Override?"; 
       MessageBoxButton button = MessageBoxButton.YesNoCancel; 
       string caption = "New porject"; 
       MessageBoxImage icon = MessageBoxImage.Warning; 
       MessageBoxResult result = MessageBox.Show(msgBoxTxt,caption, button, icon); 

       switch (result) 
       { 
        case MessageBoxResult.No: 
         //what to do here to restart the process of saving project 
         break;       
        case MessageBoxResult.Cancel: 
         break; 
        case MessageBoxResult.Yes: 
         CreateNewProejct(projectPath); 
         break; 
       } 
      } 

     } 
    } 

ответ

1

Можно рекурсивно вызвать метод новыйПроект снова.

private void NewProject() 
{ 
    var saveFolderDlg = new FolderBrowserDialog(); 

    DialogResult dlgResult = saveFolderDlg.ShowDialog(); 

    if (dlgResult == System.Windows.Forms.DialogResult.OK) 
    { 

     saveFolderDlg.RootFolder = Environment.SpecialFolder.Desktop; 
     saveFolderDlg.ShowNewFolderButton = true; 
     string projectPath = saveFolderDlg.SelectedPath; 
     string prjFileName = System.IO.Path.GetFileName(projectPath); 
     string newPath = System.IO.Path.Combine(projectPath, prjFileName); 

     if (!System.IO.File.Exists(newPath + ".rnd")) 
     { 
      CreateNewProejct(projectPath);//works fine 
     } 
     else 
     { 
      string msgBoxTxt = "Project already exists, Override?"; 
      MessageBoxButton button = MessageBoxButton.YesNoCancel; 
      string caption = "New porject"; 
      MessageBoxImage icon = MessageBoxImage.Warning; 
      MessageBoxResult result = MessageBox.Show(msgBoxTxt, caption, button, icon); 

      switch (result) 
      { 
       case MessageBoxResult.No: 
        NewProject(); 
        break; 
       case MessageBoxResult.Cancel: 
        break; 
       case MessageBoxResult.Yes: 
        CreateNewProejct(projectPath); 
        break; 
      } 
     } 
    } 
} 

Btw: есть некоторые опечатки в коде -> Proejct :)

+1

Вы должны сгенерировать новую функцию, чтобы она чисто можно назвать из любой точки мира, а не только с некоторым отправителем и RoutedEventArgs. Кроме того, я бы добавил дополнительный параметр, чтобы задать путь для сохранения. Если этот параметр пуст, путь должен быть рабочим столом, в противном случае откройте данный путь. Таким образом, пользователь получит ранее выбранную папку, которую высоко ценят все ваши пользователи;) – BobClaerhout

+0

ну, я был не сфокусирован, я думаю. спасибо @BobClaerhout. я буду иметь в виду. – Naresh

+0

yep, я изменил подпись метода и не указал его. – doerig

Смежные вопросы