Показать окно сообщения над диалоговым окном Сохранить в C # - PullRequest
0 голосов
/ 16 декабря 2008
SaveFileDialog savefileDialog1 = new SaveFileDialog();
DialogResult result  = savefileDialog1.ShowDialog();
switch(result == DialogResult.OK)
    case true:
        //do something
    case false:
        MessageBox.Show("are you sure?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question);

Как отобразить окно сообщения поверх сохраненного диалогового окна после нажатия «Отмена» в диалоговом окне SaveDialog, т. Е. Диалоговое окно «Сохранить» должно присутствовать на фоне.

Ответы [ 7 ]

4 голосов
/ 16 декабря 2008

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

// lead-up code

SaveFileDialog sft = new SaveFileDialog();
BOOL bDone;
do
{
  if (DialogResult.OK == sft.ShowDialog())
    bDone = true;
  else
  {
    DialogResult result = MessageBox.Show("Are you sure you don't want to save the changed file?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    bDone = (result == Yes) ? true : false;
  }
} while (!bDone);

// carry on

Таким образом, диалог сохранения файла ведет себя так же, как и в других приложениях Windows, и . Вы можете позволить пользователю еще раз сохранить файл (ы), если он случайно нажмет Отмена в диалоге сохранения файла.

1 голос
/ 16 декабря 2008

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

Вы можете найти сторонний класс диалога или написать свой собственный.

1 голос
/ 16 декабря 2008

Мне придется второй любос. Не может быть сделано с классом SaveFileDialog.

То, что вы в основном хотите сделать, это захватить конкретное событие нажатия кнопки в SaveFileDialog, событие, которое класс не делает доступным для вас. Решение, если вы действительно хотите, чтобы этот вид функциональности состоял в том, чтобы развернуть свой собственный диалог сохранения, чтобы вы могли обрабатывать каждое нажатие кнопки по-своему.

1 голос
/ 16 декабря 2008

Вы не можете сделать это с SaveFileDialog классом.

0 голосов
/ 07 августа 2009

Кстати, есть более эффективный способ отображения и проверки диалога. Вот так:

SaveFileDialog saveFileDialog1 = new SaveFileDialog();

if( saveFileDialog1.ShowDialog() == DialogResult.OK )
{
   // Code here...
} else Application.DoEvents();
0 голосов
/ 16 декабря 2008

Вы можете сделать это с некоторыми изменениями:

    private void Form1_Load(object sender, EventArgs e)
    {
        DialogResult result = showDialog();
        if (result == DialogResult.OK)
        {
            //Ok
        }
        else
        {
            DialogResult r = MessageBox.Show("Are you sure?", "Sure?", MessageBoxButtons.YesNo);
            if(r.ToString()=="No")
            {
                showDialog();
            }
        }
    }

    public DialogResult showDialog()
    {
        SaveFileDialog savefileDialog1 = new SaveFileDialog();
        DialogResult result = savefileDialog1.ShowDialog();
        return result;
    }
0 голосов
/ 16 декабря 2008

Как правило, не рекомендуется создавать программу, чей пользовательский интерфейс для взаимодействия с файловой системой не работает так же, как большинство других программ Windows. Вот почему нет простого способа сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...