在表单之间传递数据
本文关键字:数据 之间 表单 | 更新日期: 2023-09-27 18:09:02
我有3 winforms在我的项目和Form3上有一个复选框。我想要能够做的是单击此复选框,然后当表单退出时,在Form1中进行相同的检查(是否选中)。现有的代码我有如下,但它只是不会工作,我错过了一个技巧吗?谢谢。
//Form3
Form1 setDateBox = new Form1();
setDateBox.setNoDate(checkBox1.Checked);
//Form1
public void setNoDate(bool isChecked)
{
checkBox1.Checked = isChecked;
}
两种方法:
1 -将Form1变量"setDateBox"存储为Form3的类成员,然后从复选框CheckedChanged事件处理程序中访问"setNoDate"方法:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
setDateBox.setNoDate(checkBox1.Checked);
}
2 -如果您不希望将setDateBox作为类成员存储,或者您需要更新多个表单,您可以在Form3中定义一个事件,如下所示:
public event EventHandler<CheckedChangedEventArgs> CheckBox1CheckedChanged;
...
public class CheckedChangedEventArgs : EventArgs
{
public bool CheckedState { get; set; }
public CheckedChangedEventArgs(bool state)
{
CheckedState = state;
}
}
为Form1中的事件创建一个处理程序:
public void Form1_CheckBox1CheckedChanged(object sender, CheckedChangedEventArgs e)
{
//Do something with the CheckedState
MessageBox.Show(e.CheckedState.ToString());
}
创建表单后分配事件处理程序:
Form1 setDateBox = new Form1();
CheckBox1CheckedChanged += new EventHandler<CheckedChangedEventArgs>(setDateBox.Form1_CheckBox1CheckedChanged);
然后从Form3中触发事件(当复选框的复选状态发生变化时):
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(CheckBox1CheckedChanged != null)
CheckBox1CheckedChanged(this, new CheckedChangedEventArgs(checkBox1.Checked));
}
checkBox1
是Form3
的成员,所以不能从Form1
中引用它。
你可以:
- 创建一个单独的类,在你的表单中共享,保存影响整个应用程序的值
- 使
Form3.checkBox1
公开可见,因此您可以通过myForm3Instance.checkBox1
引用它。
在包含复选框的窗体的设计器中,将其设置为内部或公共。然后,您可以从窗体对象访问该控件。这是一种快速而肮脏的方法,但它可能会解决你的问题。
ex
In form1.designer.cs
existing
private CheckBox checkbox1;
new one
internal CheckBox checkbox1; or
public CheckBox checkbox1;
您正在创建一个新的Form1实例,而不是引用它的现有实例。
Form1 setDateBox = (Form1)this.Owner
这应该能解决你的问题。