显示第二形式的第一替代形式时在C#加载的WinForms(Show second form inst

2019-10-24 02:26发布

我有两个窗口形式。 我想说明的第二形式时,我的第一个形式的问题是loaded.But加载的第一种形式后,它显示了这两种没有隐藏我的第一种形式。 请在下面检查我的代码。 谢谢你的任何解决方案!

 form2 frm2= new form2();
 private void form1_Load(object sender, EventArgs e)
    {
     form1 frm1 = new form1();
     frm1 = this;
     frm1.Hide();
     frm2.Show();  
    }

Answer 1:

我们这里有以下几个问题:

  1. 当它画的形式加载加载表格时之前 。 因此,如果我们从这里隐藏的形式,它仍然吸引它的Paint事件。

  2. 如果我们使用Paint事件隐藏的主要形式和展示我们的第二种形式,然后我们就会有问题,显示我们的主要形式,当我们需要它监守这个调用paint事件,它会再次隐藏它。

因此,有三种可能的解决方案:

  1. 使用形式负载,但是从一个单独的线程隐藏它。
  2. 我们可以创建布尔变量一样isInitialized设置为false ,并更改为true在Paint事件中第一次运行后
  3. 我们可以把主窗体可见和使用的ShowDialog(),以显示你的第二个形式

1 - - >

    private void Form1_Load(object sender, EventArgs e)
    {            
        // We start a new task to handle our UI operations
        Task.Factory.StartNew(() =>
        {
            this.Hide();
            this.Invoke(new Action(() =>
            {
                Form frm = new Form();
                frm.Show();
                frm.FormClosing += (s, o) => this.Show();
            }), null);                
        });
    }

2 - - >

bool isInitialized = false;

private void Form1_Paint(object sender, PaintEventArgs e)
{
   if(isInitialized) return;
   Form frm = new Form();
   frm.Show();
   frm.FormClosing += (s, o) => this.Show();
   this.Hide();
   isInitialized = true;
}


Answer 2:

从你提到的代码,据我所知,你正在试图关闭登录表单,并试图开辟一个主要形式。 你可以试试这段代码的相同。 此代码将进入你的Program.cs

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

    Form1 form_login= new Form1();

    Application.Run(form_login);

    if (form_login.Authentication_success)
    {
        Application.Run(new Form2());
    }
}

在你的Form1中声明公用变量

public bool Authentication_success= true;

在Form1的Load事件接下来,添加以下代码

Authentication_success= true;
this.Close();

希望这个解决方案是有帮助的。 祝好运。



Answer 3:

另一种解决方案:

    private void Form1_Load(object sender, EventArgs e)
    {
        Task.Factory.StartNew(() =>
        {
            if (InvokeRequired)
            {
                this.Invoke(new MethodInvoker(delegate
                {
                    this.Hide();
                    Form2 frm = new Form2();
                    frm.Show();
                    frm.FormClosing += (s, o) => this.Show();
                }));
                return;
            }

        });
    }

但我觉得你的问题在下面的意见建议,为更好:)



文章来源: Show second form instead of first form when winforms loaded in C#