我有两个窗口形式。 我想说明的第二形式时,我的第一个形式的问题是loaded.But加载的第一种形式后,它显示了这两种没有隐藏我的第一种形式。 请在下面检查我的代码。 谢谢你的任何解决方案!
form2 frm2= new form2();
private void form1_Load(object sender, EventArgs e)
{
form1 frm1 = new form1();
frm1 = this;
frm1.Hide();
frm2.Show();
}
我们这里有以下几个问题:
当它画的形式加载加载表格时之前 。 因此,如果我们从这里隐藏的形式,它仍然吸引它的Paint事件。
如果我们使用Paint事件隐藏的主要形式和展示我们的第二种形式,然后我们就会有问题,显示我们的主要形式,当我们需要它监守这个调用paint事件,它会再次隐藏它。
因此,有三种可能的解决方案:
- 使用形式负载,但是从一个单独的线程隐藏它。
- 我们可以创建布尔变量一样
isInitialized
设置为false
,并更改为true
在Paint事件中第一次运行后 - 我们可以把主窗体可见和使用的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;
}
从你提到的代码,据我所知,你正在试图关闭登录表单,并试图开辟一个主要形式。 你可以试试这段代码的相同。 此代码将进入你的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();
希望这个解决方案是有帮助的。 祝好运。
另一种解决方案:
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;
}
});
}
但我觉得你的问题在下面的意见建议,为更好:)