我正在为Windows Form应用程序做一个应用程序。首先,会出现某个表单,在用户点击下一个按钮后,应隐藏此表单并显示另一个表单。
我试着去做。我设法隐藏了当前的表单,但下一个表单将不显示。
这是我的尝试:
这是按钮的事件处理程序
private void button1_Click_1(object sender, EventArgs e)
{
if (richTextBox1.Text != null)
{
this.Visible=false;
}
else
MessageBox.Show("Insert Attributes First !");
}
这是主要功能:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form2 form2 = new Form2();
Form1 form1 = new Form1();
form2.Hide();
Application.Run(form1);
while (true)
{
if (form1.Visible == false)
form2.Show();
}
}
答案 0 :(得分:5)
在关闭form1之后,While语句才会执行 - 因为它在主消息循环之外。
删除它并将代码的第一位更改为:
private void button1_Click_1(object sender, EventArgs e)
{
if (richTextBox1.Text != null)
{
this.Visible=false;
Form2 form2 = new Form2();
form2.show();
}
else MessageBox.Show("Insert Attributes First !");
}
这不是实现您想要做的事情的最佳方式。而是考虑Wizard设计模式。
或者,您可以实现一个自定义ApplicationContext来处理两个表单的生命周期。这里有一个实现启动画面的例子,它应该让你走在正确的道路上。
http://www.codeproject.com/KB/cs/applicationcontextsplash.aspx?display=Print
答案 1 :(得分:2)
Application.Run()之后的任何内容只会在主窗体关闭时执行。
您可以做的是处理VisibleChanged
事件,如下所示:
static Form1 form1;
static Form2 form2;
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
form2 = new Form2();
form1 = new Form1();
form2.Hide();
form1.VisibleChanged += OnForm1Changed;
Application.Run(form1);
}
static void OnForm1Changed( object sender, EventArgs args )
{
if ( !form1.Visible )
{
form2.Show( );
}
}
答案 2 :(得分:2)
A)主GUI线程将在对Application.Run的调用中无休止地运行,因此永远不会到达你的while循环
B)你永远不会想要像这样的无限循环(while(true)循环) - 它只会冻结线程。不确定你想要在那里实现什么。
我将在Main方法中创建并显示“main”(初始)表单(默认情况下,Visual Studio会为您执行此操作)。然后在你的按钮处理程序中,创建另一个表单并显示它以及隐藏主表单(不关闭它)。然后,确保在通过事件关闭该表单时再次显示主表单。例如:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 otherForm = new Form2();
otherForm.FormClosed += new FormClosedEventHandler(otherForm_FormClosed);
this.Hide();
otherForm.Show();
}
void otherForm_FormClosed(object sender, FormClosedEventArgs e)
{
this.Show();
}
}
答案 3 :(得分:2)
private void button5_Click(object sender, EventArgs e)
{
this.Visible = false;
Form2 login = new Form2();
login.ShowDialog();
}
答案 4 :(得分:2)
要链接到您需要的表单:
Form2 form2 = new Form2();
form2.show();
this.hide();
然后隐藏上一个表单
答案 5 :(得分:0)
我相信以下代码只会在 form1
关闭后运行
while (true)
{
if (form1.Visible == false)
form2.Show();
}
为什么不从form2
开始form1
?
Form2 form2 = new Form2();
private void button1_Click_1(object sender, EventArgs e)
{
if (richTextBox1.Text != null)
{
form1.Visible=false;
form2.Show();
}
else MessageBox.Show("Insert Attributes First !");
}
答案 6 :(得分:-1)
这是对我有用的代码,它已经足够好了。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Hide()
Form2.Show()
End Sub
结束课程