第一种形式不消失吗?

时间:2018-09-16 03:00:01

标签: c# winforms

namespace JadeComplete
{
    public partial class Form1 : Form
    {
        string curPass = "someDefaultPass";
        public Form1()
        {
            string fileName1 = "authentication.txt";

            if (System.IO.File.Exists(fileName1))
            curPass = System.IO.File.ReadAllText(fileName1);
            if (System.IO.File.ReadAllText(fileName1) == curPass)
            {
                Hide();
                Form2 frm = new Form2();
                frm.Show();
            }
        }
    }
}

我不知道为什么这不起作用。我已经尝试了多种方法,但无法找出问题所在。
我有2个Forms显示应该何时删除一个,有问题的区域就在public Form1()之后

2 个答案:

答案 0 :(得分:0)

这是表单中事件的顺序:

  1. Control.HandleCreated
  2. Control.BindingContextChanged
  3. Form.Load
  4. Control.VisibleChanged
  5. Form.Activated
  6. Form.Shown

您正在尝试将表单设置为在Form.Load试图将visible设置为true时隐藏。

最好使用Form.Shown或重写OnVisibleChanged事件,而不要使用构造函数。

我还将IO操作封装在try {}捕获和传送异常中,例如FileNotFound或常规IOException。

更多信息在这里:

https://docs.microsoft.com/en-us/dotnet/framework/winforms/order-of-events-in-windows-forms

答案 1 :(得分:0)

@ Exivent,Gauravsa的答案是正确的,您正在尝试隐藏显示的表单。 您可以在Shown事件中为您编写代码,我的示例代码-

namespace HideForm1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            try
            {
                string defpassword = "1234"; //your default password
                string passwordfromfile = "1234"; //password you are reading from .txt file

                if (passwordfromfile == defpassword)
                {
                    Form2 objForm2 = new Form2();
                    Hide();
                    objForm2.Show();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception caught: " + ex.Message);
            }

        }
    }
}