Закрытие формы во время конструктора

Действительно ли возможно закрыть форму, в то время как конструктор выполняется (или просто остановить его показывающий на данном этапе)?

У меня есть следующий код:

public partial class MyForm : Form
{        
    public MyForm()
    {
        if (MyFunc())
        {
            this.Close();
        }
    }
}

Который добавляет Основной ObjectDisposedException (), здесь:

    static void Main()
    {            
        ...

        // Following line errors
        Application.Run(new MyForm());
    }

Я попытался проверить результат MyForm как это:

static void Main()
{            
    ...

    MyForm frm = new MyForm();
    if (frm != null)
    {
        // Following line errors
        Application.Run(frm);
    }
}

Но это, кажется, не помогает. Кто-либо может сказать мне путь вокруг этого? Возможно, способ проверить форму, чтобы видеть, существует ли это все еще?

47
задан Uwe Keim 15 July 2018 в 13:36
поделиться

3 ответа

Единственное, что вы могли сделать, это установить флаг для его закрытия в конструкторе, а затем закрыть его в событии Показано . Конечно, если вы это делаете, имеет смысл переместить код, чтобы определить, нужно ли его закрывать в первую очередь.

21
ответ дан 26 November 2019 в 19:17
поделиться

Когда вы вызываете Close () в форме, внутренне он удаляет формы и освобождая любые управляемые ресурсы. Когда вы сделаете это:

Application.Run(new MyForm());

Вы, скорее всего, получите ObjectDisposedException. Что вам нужно сделать, так это установить видимость формы через свойство:

Application.Run(new MyForm() { Visible = false });

Просто убедитесь, что вы удалили вызов Close () в конструкторе или даже переместили туда назначение свойства.

8
ответ дан 26 November 2019 в 19:17
поделиться

Можете ли вы сделать MyFunc статическим? и затем сделать что-то вроде:

static void Main() 
{             
    ... 
    if (MyForm.MyFunc())
    {
        Application.Run(new MyForm()); 
    }
} 

это по сути даст вам тот же контроль над тем, будет ли форма построена или нет?

.
3
ответ дан 26 November 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: