Это потому, что форма Form1 будет основной формой приложения. В частности, он будет передан методу Application.Run
, который создаст объект ApplicationContext
с Form1, назначенным в качестве основной формы. Когда приложение запускается, оно проверяет, имеет ли форма ApplicationContext
основная форма, и если это так, то свойство Visible
этой формы будет установлено в true
, что приведет к отображению формы.
Или, выраженное в коде, это Application.Run
:
public static void Run(Form mainForm)
{
ThreadContext.FromCurrent().RunMessageLoop(-1, new ApplicationContext(mainForm));
}
RunMessageLoop
будет вызывать другую внутреннюю функцию, чтобы настроить цикл обработки сообщений, и в этой функции мы находим следующее:
if (this.applicationContext.MainForm != null)
{
this.applicationContext.MainForm.Visible = true;
}
Именно это и показывает Form1.
Это также дает подсказку о том, как действовать, чтобы форма Form1 автоматически отображалась при запуске. Все, что нам нужно сделать, это найти способ для запуска приложения без необходимости Form1 назначен в качестве основной формы в ApplicationContext
:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// create the form, but don't show it
Form1 form = new Form1();
// create an application context, without a main form
ApplicationContext context = new ApplicationContext();
// run the application
Application.Run(context);
}
Спасибо Fredrik, где вы находите блок кода if, который вы опубликовали? – George2
Я использовал рефлектор Red Gate: http://www.red-gate.com/products/reflector/ –
Прохладный, в чем разница между Show и Set Visible to true? – George2