Вызов close в редактируемой форме ShowDialog () не останавливает выполнение кода в этой форме. - PullRequest
0 голосов
/ 25 августа 2011

Итак, у меня есть моя основная форма, которая откроет другую форму из пункта меню:

mstages = new MaterialStages( ofd.FileName );
mstages.ShowDialog();

Затем в этой форме она проверяет, является ли путь к файлу верным, если это не так, ипользователь не может предоставить один, я хочу, чтобы форма закрылась.

DirectoryInfo di = null;

if ( findDataFolder() )
   di = new DirectoryInfo( Program.dataPath );
else Close();

//rest of the function

Я посмотрел, и findDataFolder () работает правильно, возвращая true и false, когда это необходимо, а остальное выполняется на«ложь» возвращается.Но он не закрывает форму и продолжает работу с остальной частью функции, вызывающей ошибки, поскольку в DirectoryInfo отсутствуют действительные данные.

Как я могу вернуться к основной форме и закрыть эту?

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Close не останавливает обработку.

Используйте Return после Close ();

if ( findDataFolder() )
   di = new DirectoryInfo( Program.dataPath );
else
{
  this.Close();
  return;
}

Хотя вы можете немного подумать о реструктуризации своего кода:

if ( findDataFolder() )
{
   di = new DirectoryInfo( Program.dataPath );
   // finish processing
}
else
  this.Close();

или

if ( findDataFolder() )
   di = new DirectoryInfo( Program.dataPath );

if (di == null)
  this.Close();
else
{
  // finish processing
}

В идеале вы действительно хотите вернуть результаты диалога:

this.DialogResult = DialogResult.OK;
// or 
this.DialogResult = DialogResult.Cancel;
// or
this.DialogResult = DialogResult.About;
// etc.
2 голосов
/ 26 августа 2011

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

как-то так.

    var form2 = new Form2();
    if (form2.ValidateSomething())
    {
       form2.ShowDialog();
    }

Метод проверки в Форме2

    internal bool ValidateSomething()
    {
        // Return result
    }

надеюсь, что это поможет.

...