在表单之间切换并正确发送变量

本文关键字:变量 表单 之间 | 更新日期: 2023-09-27 18:32:51

我想知道如何通过按钮单击事件在表单之间正确切换。

我有表格 1 和表格 2。窗体 1 具有: -文本框窗体 1 -按钮窗体1窗体 2 具有: -文本框窗体 2 -按钮窗体2

我想on_click ButtonForm1 事件转到 Form2。然后我想写一些消息到TextBoxForm2并按ButtonForm2,它将再次转到Form1,来自TextBoxForm2的消息将出现在TextBoxForm1中。

一切正常,但我有一个问题。当我关闭应用程序并想调试并重新启动它时,会出现一些错误,例如:"应用程序已在运行"。

表格1:

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();
    }

请问我怎样才能正确地做到这一点? :)我是初学者,谢谢!

在表单之间切换并正确发送变量

我不会像您提到您是初学者那样使用 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();
}

以及创建表单2的位置

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();
}

简单的解决方案是使用模态形式。显示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();