C# 我应该在两张表格之间做什么?
如果我按下按钮1,文本框1在表格2->中显示“你好” 如果我按按钮2再次显示表单2,单词“Hello”将消失,原始文本框1的文本将出现 如何防止按下按钮1的结果消失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) {
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的错误