Windows窗体this.hide()不起作用

时间:2018-06-26 07:48:58

标签: c# winforms

我有一个小问题,因为我听不懂。

我用两种形式(登录和仪表板)编写了一个WinForm应用程序

启动表单是登录表单。 如果登录确实有效,则该表格应切换到仪表板表格。 登录表单应该被隐藏/禁用。

在代码中,应用程序编写了一个条目,用户已登录(保持登录状态),并且下次启动时不必输入凭据。

现在的问题是,启动应用程序时始终显示“登录”表单。尽管应用程序通过了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 :(得分:0)

发表评论的人回答了您的问题,但这是更多解释:

如果您转到Microsoft docs,则会发现Windows表单FORM的生命周期

因此在启动表单时会这样:

  • Control.HandleCreated
  • Form.Load
  • Form.Activated
  • 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()事件(在设计窗口中选择表单(不控制表单内部),在右侧具有属性窗口。在属性窗口的顶部栏中,您可以在属性和事件之间切换。切换到事件并查找Shown事件。找到事件后,双击右侧的空格,它将自动为您创建代码事件)

现在,当您创建显示的事件时,将代码复制到其中即可使用。

答案 1 :(得分:-2)

我必须在静态void main方法中添加If语句。 在这种情况下,它确实有效。