在 C# 中的窗体之间传输变量
本文关键字:之间 传输 变量 窗体 | 更新日期: 2023-09-27 18:04:41
我有 2 种形式 - 表格 1 和表格 2。
表格1:
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();
}
但是当我点击时,什么也没发生。文本框为空。为什么?
你从来没有真正显示过表单,也许你应该有更像的东西:
我有 2 种表格 - 表格 1 和表格 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);
f1.Show(); // You're missing this call
this.Close();
}
如果你想通过第二个表单到达你的第一个活动表单,你应该在第二个表单中定义第一个表单,如下所示:
Form1 frm = (Form1)Application.OpenForms["Form1"];
而不是
Form1 f1 = new Form1();
由于如果使用"Form1 f1 = new Form1((;",您将创建一个新表单,因此您将无法访问活动表单。
因为您创建新的 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();
}
您没有显示您创建的form1
。
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
是主窗体"您可以在 Main 上检查它",如果您关闭它,它将退出整个应用程序,因此如果是这种情况,要么使 form1 成为主窗体,要么调用此this.Hide();
而不是this.Close();
我更喜欢使用保存状态的形式中的属性来解决这个问题
== 表格 1 ==
public partial class Form1 : Form
{
bool is_dsuzey;
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (is_dsuzey) textBox1.Text = "1";
}
public bool IsDsuzey { get { return is_dsuzey; } set { is_dsuzey = value; } }
}
== 表格 2 ==
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.IsDsuzey = checkBox1.Checked;
f1.Show();
}
}
如果它是应用程序的主要形式,我会提醒this.Close();
语句Form2
,因为它将关闭整个应用程序。如果Application.Run()
调用其他形式,则没有问题。