C# 我应该在两张表格之间做什么?

C# 我应该在两张表格之间做什么?,c#,C#,如果我按下按钮1,文本框1在表格2->中显示“你好” 如果我按按钮2再次显示表单2,单词“Hello”将消失,原始文本框1的文本将出现 如何防止按下按钮1的结果消失 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) {

如果我按下按钮1,文本框1在表格2->中显示“你好”

如果我按按钮2再次显示表单2,单词“Hello”将消失,原始文本框1的文本将出现

如何防止按下按钮1的结果消失

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    } 

    private void Form1_Load(object sender, EventArgs e)
    {

    } 

    private void Button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(this);
        frm2.textBox1.Text = "Hello";
        frm2.Show();
    } 

    private void Button2_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(this);
        frm2.Show();
    }
}

public partial class Form2 : Form
{
    Form1 frm1 = new Form1();

    public Form2(Form1 _form)
    {
        InitializeComponent();
        frm1 = _form;
    }

    public Form2()
    {
        InitializeComponent();
    } 

    private void Form2_Load(object sender, EventArgs e)
    { 

    }
}

尝试在按钮单击事件之外创建Form2的实例

Form2 frm2 = new Form2(this);

private void Button1_Click(object sender, EventArgs e)
{
    frm2.textBox1.Text = "Hello";
    frm2.Show();
} 

private void Button2_Click(object sender, EventArgs e)
{
    frm2.Show();
}

如果要保留以前在
Form2
中设置的文本,则不允许关闭
Form2
。要防止
Form2
关闭,请设置
e.Cancel=true窗体关闭中的code>
事件处理程序:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true; // Clancel closing
        Visible = false; // Instead, make Form2 invisible.
    }
}
确保在表单设计器中创建事件处理程序。仅复制/粘贴不会连接事件

表格1的代码

public partial class Form1 : Form
{
    private Form2 _frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _frm2.textBox1.Text = "Hello";
        _frm2.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        _frm2.Show();
    }
}

但我们可能看错了。我们不应该使用文本框来存储数据。相反,我们为此创建了一个数据类。现在,我们可以自由地打开和关闭窗体。剩下的只是数据

public class Data
{
    public string Greeting { get; set; }
}
Form2
code:

private readonly Data _data;

public Form2(Data data) // Note that now, we pass a Data object, not a Form
{
    InitializeComponent();
    _data = data;
    textBox1.Text = _data.Greeting;
}

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    _data.Greeting = textBox1.Text; // Stores back text box edits to the Data object.
}
private readonly Data _data = new Data();

public Form1()
{
    InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
    _data.Greeting = "Hello";
    var frm2 = new Form2(_data);
    frm2.Show();
}

private void Button2_Click(object sender, EventArgs e)
{
    var frm2 = new Form2(_data);
    frm2.Show();
}
Form1
code:

private readonly Data _data;

public Form2(Data data) // Note that now, we pass a Data object, not a Form
{
    InitializeComponent();
    _data = data;
    textBox1.Text = _data.Greeting;
}

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    _data.Greeting = textBox1.Text; // Stores back text box edits to the Data object.
}
private readonly Data _data = new Data();

public Form1()
{
    InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
    _data.Greeting = "Hello";
    var frm2 = new Form2(_data);
    frm2.Show();
}

private void Button2_Click(object sender, EventArgs e)
{
    var frm2 = new Form2(_data);
    frm2.Show();
}

它会消失,因为您在
按钮2中创建了一个新的
表单2
。将
frm2
声明为
Form1
中的类字段,不要在
按钮2中创建新字段。谢谢。我理解。但我不知道在哪里创建Form2实例。“Form2 frm2=新Form2(此);”这是您创建Form2实例的那一行,请将这一行移到单击事件的外侧,然后再试一次。感谢您的好意。当我调试这段代码时,它有System.StackOverflowException。我认为Form2中的“Form1 frm1=new Form1();”是个问题@황준석: 是的,如果
Form1
创建一个
Form2
Form2
创建一个
Form1
,那么这个新的
Form1
再次创建一个
Form2
,这个再次创建一个
Form1
,依此类推。。。。。在
Form2
中,替换
Form1 frm1=new Form1()
表格1 frm1。因为您在构造函数中分配了它,所以无论如何您都不需要这个
new Form1()
。在这个代码之后,它会出现一个类似于Form2 is deleted Objects的错误