Windows form this.hide () не работает - PullRequest
0 голосов
/ 26 июня 2018

У меня небольшой вопрос, потому что я чего-то не понимаю.

Я написал приложение WinForm с двумя формами (Login & Dashboard)

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

В коде приложение записывает запись о том, что пользователь вошел в систему (оставайтесь в системе) и не должен вводить учетные данные при следующем запуске.

Теперь проблема в том, что форма входа в систему всегда отображается при запуске приложения. Хотя приложение передает точку this.hide ().

Вот код из формы для входа, Эти Сниппе

 public LOGIN()
    {
        InitializeComponent();
        if (File.Exists(programpath + "config.dat"))
        {
            lines = System.IO.File.ReadAllLines(programpath + "config.dat");
            uid = lines[0];
            pwd = lines[1];
            WebClient client = new WebClient();
            NameValueCollection formParams = new NameValueCollection();
            formParams["uid"] = Encrypt.DecryptString(uid,"test");
            formParams["pwd"] = Encrypt.DecryptString(pwd, "test");
            byte[] responseByte = client.UploadValues(url, "POST", formParams);
            string result = Encoding.UTF8.GetString(responseByte);
            if (result == "true")
            {
                var frm = new Dashboard();
                frm.Location = this.Location;
                frm.StartPosition = FormStartPosition.Manual;
                frm.FormClosing += delegate { this.Show(); };
                frm.Show();
                this.Hide();
            }
        }
    }

Может кто-нибудь объяснить мне, почему это происходит и что мне делать?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Кто-то в комментарии ответил на ваш вопрос, но вот еще объяснение:

Если вы перейдете на Документы Microsoft , вы найдете жизненный цикл формы Windows FORM

Такпри запуске формы это выглядит так:

  • Control.HandleCreated
  • Form.Load
  • Form.Activation
  • Form.Shown

В качестве объяснения для Form.Shown в документации написано Occurs whenever the form is first displayed.

Итак, в основном, когда вы делаете в своем коде:

Form f1 = new Form();

Вы создали экземпляр вашегоформа, которая запускается public f1() внутри вашего f1 файла, НО все равно она не отображается, поэтому вы не можете скрыть то, что даже не отображается.

Когда вы звоните f1.Show() или f1.ShowDialog(), это будет showформы, и это делается до того, как Form.Shown часть запускается, поэтому внутри этого метода отображается форма.

Решение для этого - перейти к вашей форме и создать событие Form.Shown() (в окнах дизайна выберите форму (неконтроль внутри него) и на правой стороне у вас есть окно свойств. В верхней панели в собственности wiТеперь вы можете переключаться между свойствами и событиями.Переключитесь на события и найдите Shown событие.Когда вы найдете его двойным щелчком в пространстве справа, оно автоматически создаст для вас событие в коде)

Теперь, когда вы создали показанное событие, скопируйте в него код, и оно будет работать.

0 голосов
/ 26 июня 2018

Я должен добавить оператор If в метод static void main.В этом случае это работает.

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