C# 在C语言中在窗体之间传递变量
我有两张表格——表格一和表格二 表格1:C# 在C语言中在窗体之间传递变量,c#,winforms,C#,Winforms,我有两张表格——表格一和表格二 表格1: public partial class Form1 : Form { public void Drawnewmap(bool suzey) { bool dsuzey=suzey; if (dsuzey==true) textBox1.Text = "1" ; } public Form1() {
public partial class Form1 : Form
{
public void Drawnewmap(bool suzey) {
bool dsuzey=suzey;
if (dsuzey==true) textBox1.Text = "1" ;
}
public Form1()
{
InitializeComponent();
}
}
表格2:
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
this.Close();
}
但当我点击时,什么也没发生。文本框是空的。为什么?您没有显示您创建的表单1
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
f1.Show();//or ShowDialog()...
this.Close();
}
请注意,如果Form2是主窗体,您可以在主窗体上对此进行检查,如果关闭它,它将退出整个应用程序,因此如果是这种情况,请将form1作为主窗体,或者将其称为this.Hide;而不是这个。关闭 您从未实际显示过表单,也许您应该有更像: 我有两张表格——表格一和表格二
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
f1.Show(); // You're missing this call
this.Close();
}
因为您创建了新的Form1实例。我认为在子窗口中从父窗口调用某些东西是个坏主意。但你可以这样做: 创建Form2时,将引用传递给当前Form1对象
Form2 form = new Form2(this);
在Form2构造函数中,将Form1引用保存在私有变量中
private Form1 myform1;
那么您的代码需要如下所示:
private void button1_Click(object sender, EventArgs e)
{
bool m = false;
if (checkBox1.Checked == true) m = true;
myform1.Drawnewmap(m);
this.Close();
}
我更喜欢使用持有状态的表单中的属性来解决这个问题 ==表格1== ==表格2==
我要提醒大家,在这里加上一个字母;语句,因为它将关闭整个应用程序。如果Application.Run调用其他表单,则没有问题。如果希望通过第二个表单访问第一个活动表单,则应在第二个表单中定义第一个表单,如下所示:
Form1 frm = (Form1)Application.OpenForms["Form1"];
而不是
Form1 f1 = new Form1();
由于如果使用Form1 f1=new Form1;,将创建一个新表单;,您将无法访问活动表单。FYI-您不必在条件中使用==true。您可以说如果checkBox1.Checked m=true;。如果dusuzey textBox1.Text=1;,则相同;。这将迫使您对变量进行命名,以便能够立即清楚地知道它们是真是假,就像bool is_box_checked。。ifis_box_checked{..}@ja72:它应该更像一个谓词,而不是一个疑问句:box_已选中,因此:如果box_已选中。。。。
Form1 frm = (Form1)Application.OpenForms["Form1"];
Form1 f1 = new Form1();