我需要Windows窗体的帮助。我创建了几个窗体,我试图将它们链接在一起。现在 form4 有两个按钮,我想链接到 form2 和 form3 。我在 form4 上的第一个按钮没有加载 form2 ,当我点击按钮时它只会重新加载。我对该按钮的代码是:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
form2 上的我有一个加载事件
private void form4_load(object sender, EventArgs e)
{
var f4 = new Form4();
this.Close();
f4.ShowDialog();
}
这就是在form2上看button1_click的样子:
private void button1_Click(object sender, EventArgs e)
{
Form1.setPlayerNames(p1.Text, p2.Text);
this.Close();
}
答案 0 :(得分:0)
你几乎没有问题。第一个是模态形式的工作方式,你必须这样做:
void form4_load(object sender, EventArgs e)
{
var f4 = new Form4();
this.Close(); // close first
f4.ShowDialog();
}
否则this.Close
在您关闭f4
之前不会发生。
其次与启动表单的运行方式有关。通常你有代码
Application.Run(new Form1());
您必须将其更改为
var f1 = new Form1();
f1.ShowDialog();
否则,当您关闭f1
时,您的申请将会终止。而且你不想要这个,你想要另一个表格作为主要形式。
答案 1 :(得分:0)
您需要在program.cs上调用表单,如下所示:
IMappingEngine
将form2上的load事件留空,就像这样;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form4());
}
}
您已经在开始时加载了form4,无需再次加载
答案 2 :(得分:0)
我没有得到你想要做的事情,但这就是:
按下按钮,您将创建Form2类型的表单。
当Form2完成加载时,它会创建一个Form4类型的新表单并显示它。
基本上会发生什么:
<小时/> Form4 已创建。
用户在 Form4 上按 Button1 。
Button1 会创建新的 Form2 并显示它。
Form2 加载,创建一个新的 Form4 并显示它。
<小时/> 这就是为什么你看到Form4&#34;重新加载&#34;本身。
如果删除Form2加载事件中显示Form4的行,您将看到正在创建Form2。
答案 3 :(得分:0)
private void Form1_Load(object sender, EventArgs e)
{
Hide();
new Form2().Show();
}
缩短方式,如果您不希望form1隐藏,请删除Hide();
。