JimB_ Ответов: 1

В C# как вернуться в форму с помощью mainform_formclosing при нажатии кнопки Отмена диалоговое окно savefiledialog нажата


public void SaveToFile()
        {
 SaveFileDialog saveToFileDialog = new SaveFileDialog()   
     { 
    Filter = "Comma Separated Values (*.csv)|*.csv| Text File 
    (*.txt)|*.txt ",
    FilterIndex = 0,
    RestoreDirectory = true
    };
    if (saveToFileDialog.ShowDialog() == DialogResult.OK)                               
    //After User Opens the DialogBox syste prepares to create a new file
      {
     Stream SaveToFile = File.Open(saveToFileDialog.FileName, 
    FileMode.CreateNew);   //System cretae new file
    StreamWriter FileToWrite = new StreamWriter(SaveToFile);    
     String[] contents = 
     ShowDataInScreenTxtb.Lines.ToArray();
     for (int i = 0; i < contents.Length; i++)
       {
           FileToWrite.WriteLine(contents[i]);    
     }
    DialogResult dialogResult = MessageBox.Show("Would you like to Refresh 
    the Screen ?", "Data has been Saved succesfully!", 
    MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (dialogResult == DialogResult.Yes)
    {
    FileToWrite.Close();
    ShowDataInScreenTxtb.Clear();
    }
    else if (dialogResult == DialogResult.No)
    { 
    FileToWrite.Close();
    }
    }
    if (saveToFileDialog.ShowDialog() == DialogResult.Cancel)
    {
    return;
    }

}
Hi C# programmers little help here please. It work if save file menuItemlink but it does not work when I call savefile() method from MainForm_FormClosing
how to return to main form if savefiledialog cancel button pressed,
if I press the cancel button it continues asking until it close application. but it does not return to the application

        


Что я уже пробовал:

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
    if (ShowDataInScreenTxtb.Text == string.Empty)
    {
    DialogResult dialogResultExit = MessageBox.Show("Do you really want to 
    Close the Application?",  "Close Alert!", MessageBoxButtons.YesNo, 
    MessageBoxIcon.Warning);
     if (dialogResultExit == DialogResult.Yes)
    {
         return;
    }
     else if (dialogResultExit == DialogResult.No)
    {
      e.Cancel = true;
     }
     }
      if (ShowDataInScreenTxtb.Text != string.Empty)
     {
    DialogResult dialogForClose = MessageBox.Show("Data displayed on screen 
    will be deleted!" + "\n" + "\n" + "Would you like to Save it before 
    Closing the application?",  "Save Data Alert", 
    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
    switch (dialogForClose)
    {
    case DialogResult.Yes:
    this.SaveToFile();
    break;
    case DialogResult.No:
    this.saveChanges = false;
    break;
    }
    e.Cancel = this.saveChanges;
   }         
  }
  }

1 Ответов

Рейтинг:
8

OriginalGriff

Первое, что следует отметить, это то, что ваш отступ неправильный - что, если вы используете Visual Studio, вероятно, означает, что ваш код не компилируется. Если это так, используйте CTRL+K, D, чтобы правильно отформатировать документ, чтобы вы могли видеть, что происходит:

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
    if (ShowDataInScreenTxtb.Text == string.Empty)
        {
        DialogResult dialogResultExit = MessageBox.Show("Do you really want to Close the Application?",
                                                        "Close Alert!",
                                                        MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Warning);
        if (dialogResultExit == DialogResult.Yes)
            {
            return;
            }
        else if (dialogResultExit == DialogResult.No)
            {
            e.Cancel = true;
            }
        }
    if (ShowDataInScreenTxtb.Text != string.Empty)
        {
        DialogResult dialogForClose = MessageBox.Show("Data displayed on screen will be deleted!\n\n" +
                                                      "Would you like to Save it before Closing the application?",
                                                      "Save Data Alert",
                                                      MessageBoxButtons.YesNoCancel,
                                                      MessageBoxIcon.Warning);
        switch (dialogForClose)
            {
            case DialogResult.Yes:
                this.SaveToFile();
                break;
            case DialogResult.No:
                this.saveChanges = false;
                break;
            }
        e.Cancel = this.saveChanges;
        }
    }
Первое, что нужно отметить, это то, что this.saveChanges устанавливается только в одной ветви - когда dialogForClose имеет значение "Нет", вы устанавливаете его в false - так что его значение неизвестно / неопределенно, когда значение "Да". Установка значения true, когда результат "да", может решить вашу проблему.