Как предотвратить отображение формы в конструкторе? - PullRequest
1 голос
/ 22 февраля 2010

У меня есть приложение на C #, и я пытаюсь предотвратить отображение формы в конструкторе.

Я запускаю форму так:

Form1 f = new Form1();
f.ShowDialog();

что мне нужно сделать в конструкторе, чтобы f.ShowDialog не запускался и не продолжал выполнение кода.

Ответы [ 4 ]

1 голос
/ 22 февраля 2010

Не можете ли вы добавить открытое свойство (ShowTheDialog в этом примере) в конструктор для f и установить true, если вы хотите вызвать f.ShowDialog

Form1 f = new Form1();
if(f.ShowTheDialog) {
  f.ShowDialog();
}
0 голосов
/ 22 февраля 2010

Как насчет вызова ShowDialog в самом конструкторе, если он должен быть показан?

И тогда вам нужно только сделать:

Form1 f = new Form1();
0 голосов
/ 22 февраля 2010

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

Я не уверен, что это технически правильно, но, похоже, оно работает. Pentium10 в своем классе Window создает другой открытый метод с именем ShowDialog, который скрывает унаследованный ShowDialog. Затем внутри проверьте вашу переменную и, только если это разрешено, вызовите базовый метод ShowDialog, например:

public partial class Window3 : Window
{
    bool _allowed { get; set; }
    public Window3( bool allowed)
    {
        _allowed = allowed;
        InitializeComponent();
    }

    public void ShowDialog()
    {
        if( !_allowed)
            return;
        else
            base.ShowDialog();
    }
}
0 голосов
/ 22 февраля 2010

(я не эксперт по формам окон, но) не могли бы вы установить флаг в своем конструкторе, может ли форма отображаться или нет, затем переопределить метод OnLoad (), и если ваш флаг имеет значение false, скрыть форма немедленно, например:

private bool _canShow = true;
public Form1()
{
  _canShow = ...;
}

protected override OnLoad(EventArgs e)
{
  if (!_canShow) Close();
  base.OnLoad(e);
}
...