Как открыть диалоговое окно сохранения файла, когда я нажимаю «ОК» в окне сообщения

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


person Developer    schedule 26.08.2010    source источник


Ответы (3)


В обработчике события кнопки используйте следующий код.

DialogResult messageResult = MessageBox.Show("Save this file?", "Save", MessageBoxButtons.OKCancel);
if (messageResult == DialogResult.OK)
{
    using (var dialog = new System.Windows.Forms.SaveFileDialog())
    {
        dialog.DefaultExt = "*.txt";
        dialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
        DialogResult result = dialog.ShowDialog();
        if (result == DialogResult.OK)
        {
            string filename = dialog.FileName;
            // Save here
        }
    }
}

Изменить: если вы хотите получить FileStream напрямую, вы можете использовать SaveFileDialog.OpenFile(). Это требует меньше разрешений, если вы запускаете приложение с частичным доверием.

person Albin Sunnanbo    schedule 26.08.2010
comment
Привет, изначально у меня будет окно сообщений с текстом. Когда я нажимаю «ОК», я хочу открыть диалоговое окно сохранения файла. - person Developer; 26.08.2010
comment
msdn.microsoft.com/en-us/library/519bytz3.aspx MessageBox.Show() также возвращает DialogResult, который вы можете использовать. - person mehmet6parmak; 26.08.2010

Вы можете погуглить это. Если у вас возникли проблемы с событием click. Я предполагаю, что вы используете визуальную студию, просто дважды щелкните кнопку на поверхности дизайна и напишите свой код внутри обработчика, который вы используете.

http://www.jonasjohn.de/snippets/csharp/save-file-dialog-example.htm

MessageBox.Show() возвращает DialogResult

  DialogResult result1 = MessageBox.Show("Is Dot Net Perls awesome?",
            "Important Question",
            MessageBoxButtons.OK);

  if (result1 == DialogResult.OK)
  { //Show SaveFileDialog }
person mehmet6parmak    schedule 26.08.2010

Я получил ответ, это то, что я прошу

          MessageBox.Show("Save The Current File");
            if (Convert.ToBoolean( DialogResult.OK ))
            {
                SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                saveFileDialog1.InitialDirectory = @"C:\";                  
                saveFileDialog1.RestoreDirectory = true;

                if (saveFileDialog1.ShowDialog() == DialogResult.OK)                    
                    string s= saveFileDialog1.FileName;                    
            }
person Developer    schedule 26.08.2010
comment
Сначала я хотел сказать, что это не скомпилируется, но с закрывающим '}' это действительно так. Тогда я собирался сказать, что этот код не делает того, что вы от него ожидаете, но опять же, он действительно делает. Странно, как две ошибки могут быть правильными. Но тем не менее никогда больше не пишите такой запутанный код. - person Albin Sunnanbo; 26.08.2010
comment
Я просто пишу образец, поэтому я пропустил конечный тег - person Developer; 26.08.2010
comment
Да, но проблема в строке 'if (Convert.ToBoolean(DialogResult.OK))'. Если вы добавите дополнительные кнопки в MessageBox (например, OKCancel), это всегда будет верно, поскольку вы не сравниваете результат с MessageBox, вы просто проверяете, что CONSTANT DialogResult.OK не равен нулю. Это выглядит чистой случайностью, что в данном конкретном случае это работает, но как только вы добавите еще одну кнопку в MessageBox, ваш код развалится. - person Albin Sunnanbo; 26.08.2010
comment
Для моей цели достаточно OK, поэтому я сделал это - person Developer; 26.08.2010