我有两个窗体。我想在第一个表单加载时显示第二个表单。但问题是在加载第一个表单后,它会显示两个表单而不隐藏我的第一个表单。请检查下面的代码。谢谢你的任何解决方案!
form2 frm2= new form2();
private void form1_Load(object sender, EventArgs e)
{
form1 frm1 = new form1();
frm1 = this;
frm1.Hide();
frm2.Show();
}
答案 0 :(得分:0)
我们在这里遇到以下问题:
表单加载在之前加载表单。因此,如果我们从这里隐藏表单,它仍然会在Paint事件中绘制它。
如果我们使用Paint事件来隐藏主窗体并显示我们的第二个窗体,那么当我们需要它时,我们将有问题显示我们的主窗体,因为这会调用paint事件并且它会再次隐藏它
所以有三种可能的解决方案:
isInitialized
这样的bool变量设置为false
,并在第一次运行Paint事件后将其更改为true
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;
}
答案 1 :(得分:0)
从您提到的代码中,我了解到您正在尝试关闭登录表单并尝试打开主表单。您可以尝试这段代码。此代码将进入您的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();
希望这个解决方案很有帮助。祝你好运。
答案 2 :(得分:0)
另一种解决方案:
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;
}
});
}
但我认为根据你的问题在评论中提出以下建议会更好:)