我想知道如何通过按钮点击事件在表单之间正确切换。
我有Form1和Form2。 Form1有:-TextBoxForm1 -ButtonForm1 Form2有:-TextBoxForm2 -ButtonForm2
我想on_click ButtonForm1事件转到Form2。然后我想给TextBoxForm2写一些消息并按下ButtonForm2它将再次转到Form1,TextBoxForm2的消息将出现在TextBoxForm1中。
一切正常,但我有一个问题。当我关闭应用程序并且我想调试并再次启动时,会出现一些错误:“应用程序已在运行”。
Form1中:
public static string MSG;
public Form1()
{
InitializeComponent();
TextBoxForm1.Text = MSG;
}
private void ButtonForm1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
this.Hide();
//There is probably my fault but when I was trying this.Close(); everything shutted down
form2.Show();
}
窗体2:
private void ButtonForm2_Click(object sender, EventArgs e)
{
Form1.MSG = TextBoxForm2.Text;
Form1 form= new Form1();
form.Show();
this.Close();
}
我该如何正确地做到这一点? :)我是初学者,谢谢!
答案 0 :(得分:0)
当你提到你是一个初学者时,我不会选择使用STATIC来传递表格,但是让我们为你工作。
在主窗体中创建一个新方法来处理Hans在评论中提到的事件调用。然后,在创建第二个表单后,附加到其结束事件以强制表单1再次变为可见。
//在Form1的课程中......
void ReShowThisForm( object sender, CancelEventArgs e)
{
// since this will be done AFTER the 2nd form's click event, we can pull it
// into your form1's still active textbox control without recreating the form
TextBoxForm1.Text = MSG;
this.Show();
}
以及您在哪里创建form2
private void ButtonForm1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Closing += ReShowThisForm;
this.Hide();
form2.Show();
}
并在第二个表单中单击,您只需要设置静态字段并关闭表单
private void ButtonForm2_Click(object sender, EventArgs e)
{
Form1.MSG = TextBoxForm2.Text;
this.Close();
}
答案 1 :(得分:0)
简单的解决方案是使用模态形式。暂时显示Form2
,当显示时Form1
不可见。
var form2 = new Form2();
this.Visible = false; // or Hide();
form2.ShowDialog(this);
this.Visible = true;
要传递数据,您可以在Form2
中定义属性,例如:
public string SomeData {get; set;}
Form1
必须设置SomeData
,然后显示Shown
并显示。可以使用相同的属性从Form2
(关闭前)获取数据。
// form 1 click
var form2 = new Form2() { SomeData = TextBoxForm1.Text; }
this.Visible = false;
form2.ShowDialog(this);
this.Visible = true;
TextBoxForm1.Text = form2.SomeData;
// form 2 shown
TextBoxForm2.Text = SomeData;
// form 2 click
SomeData = TextBoxForm2.Text;
Close();