Проблема видимости Windows Forms - PullRequest
1 голос
/ 15 июля 2009

Я не совсем понимаю, как сделать форму видимой. При создании приложения Windows Forms форма Form1 по умолчанию автоматически отображается, даже без явного вызова метода Show. Но если мы хотим показать другую форму и сделать ее видимой, мы должны сделать ее видимой, вызвав Show.

Есть идеи, почему есть такие различия?

Я использую VSTS 2008 + C # + .Net 2.0.

Ответы [ 3 ]

4 голосов
/ 15 июля 2009

Посмотрите на файл "Program.cs", который VS генерирует для вас.

static class Program {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1()); // and especially this line :)
    }
}
2 голосов
/ 15 июля 2009

Это потому, что 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);
}
1 голос
/ 15 июля 2009

, потому что form1 - это основная форма, которая вызывается Application.Run (new form1 ());

вы найдете этот код в файле program.cs и можете изменить его на любую форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...