Правильно Использовать DialogResult

в ответ на недавний вопрос у меня был (здесь), Ганс Пассант заявил, что я должен установить DialogResult закрыть мои формы вместо form.Close() хотя я не могу понять, почему?

если я правильно прочитал, в документации MSDN говорится, что это просто скроет форму, а не правильно ее утилизирует, в которую я верил .Close() делать?

экстракт из документации.

метод Close не является автоматически вызывается, когда пользователь нажимает кнопку Закрыть диалогового окна или задает значение свойства DialogResult. Вместо этого форма скрыта и может быть показана снова без создания нового экземпляра диалогового окна. Из-за этого поведения необходимо вызвать метод Dispose формы, когда форма больше не нужна приложению.

С другой стороны, Microsoft создала страница поддержки это говорит о том, как использовать свойство DialogResult и в разделе" убедитесь, что он работает " этого он заявляет, что щелчок so закроет форму.

поэтому мой вопрос в два раза, должен ли я продолжать использовать Close или DialogResult вместо этого; и приводит ли диалог закрыть или скрыть форму. Из кода, который я сделал ниже (простая форма с двумя кнопками), казалось бы, что он действительно скрыт только как точка останова на this.Close() удар..(с this.Close() прокомментировал, форма по-прежнему исчезает, просто не уверен, скрыт или нет)

    public Form1()
    {
        InitializeComponent();
        button1.Click += (s, e) =>
            {
                 //I edited my question to include using
                using(Form1 form = new Form1())
                {
                    form.ShowDialog();
                }

            };
        button2.Click += (s, e) => 
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            };
    }

2 ответов


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

Так для пример

using (Form1 form = new Form1())
{
    DialogResult dr = form.ShowDialog();
    if(dr == DialogResult.OK)
    {
        string custName = form.CustomerName;
        SaveToFile(custName);
    }

}

если вы называете Close и выберите DialogResult свойство на самом деле не проблема. Вам просто нужно обязательно позвонить Dispose. Я предпочитаю делать это с помощью блок:

using (Form1 form = new Form1())
{
    form.ShowDialog();
}

я изначально думал, что вы можете позвонить ShowDialog на Form это уже было Close метод называется. Это не так. Если вы показываете форму модально с ShowDialog, похоже, не имеет значения, закрыт ли он в результате Close метод или установка DialogResult свойство. Казалось бы, установка DialogResult - это просто короткий путь для закрытия Form.

но звоните ли вы Close и выберите DialogResult свойство, ключ должен убедиться, что вы вызываете Dispose() или поместите форму в блок using.