隐藏Form1,在Form1_Load

时间:2016-09-05 19:13:56

标签: c# winforms

我的应用程序的Form1是我想要的登录页面:
- 在某些条件下显示
- 在某些条件下隐藏并显示Form2

我可以通过按钮点击事件隐藏/显示表单,如此,

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2= new Form2();
        f2.Show();
        this.Hide();
    }
  

但是相同的技术不适用于Form1_Load。

我在this thread中尝试了第一个例子,

Program.cs的

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run();
    }

Form1

    private void Form1_Load(object sender, EventArgs e)
    {

        Form2 f2= new Form2();
        f2.Show();
        this.Hide();
    }

但它没有显示Form1或Form2,我也看不出它是怎么回事。第二个例子我无法理解我如何实现,而下一个谷歌的结果更令人困惑 请帮助我坚持这2小时。

3 个答案:

答案 0 :(得分:3)

在program.cs的最后一行中,您必须在括号之间键入new Form1()。所以,你的program.cs代码如下:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

C#无法隐藏form_load中的表单显然。 要解决隐藏问题,您可以使用计时器并在tick事件中隐藏表单。即:

Timer timer = new Timer();

private void timerTick(object sender, EventArgs e)
{
    timer.Enabled = false;
    this.Hide();
}

private void Form1_Load(object sender, EventArgs e)
{
   timer.Tick += new EventHandler(timerTick);
   timer.Interval = 10;
   Form2 frm = new Form2();
   frm.Show();
   timer.Enabled = true;
 }

这很有效。我测试了它。

我希望这会有用。

答案 1 :(得分:1)

你好,你可以使用这个

;display_errors
;display_startup_errors
;error_reporting 

答案 2 :(得分:0)

为什么不颠倒表单的顺序?从main方法中的主窗体开始。

Application.Run(new Form2());

现在,在Form2的构造函数中,使用ShowDialog调用登录表单,并在Form2中的全局变量中设置登录结果

public class Form2:Form
{
     private bool _isValidated = false;
     public Form2()
     {
         InitializeComponent();

         // Add here the conditions to check if you don't want to 
         // run the login process...
         // if(loginNotRequired) 
         //    _isValidated = true;
         // else 

         using(Form1 fLogin = new Form1())
         {
             // This blocks until the user clicks cancel or ok buttons
             DialogResult dr = fLogin.ShowDialog();
             if(dr == DialogResult.OK)
                _isValidated  = true;
         }
     }

现在在Form2.Load事件中检查您的登录状态,如果登录失败则关闭Form2

    private void Form2_Load(object sender, EventArgs args)
    {
         if(!_isValidated)
            this.Close();
         else
            .....
    }