错误地在两个形式之间接收布尔变量
本文关键字:之间 变量 布尔 两个 错误 | 更新日期: 2023-09-27 18:34:32
All.
我想接收从表单 1 到 表单 2 的复选框 1 数据。我使用 get 和 set 方法来接收变量的含义。我为此使用了这段代码。但它没有用。为什么?问题出在哪里?
表单1.cs
...
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 test = new Form2();
test.checkBox1 = checkBox1.Checked;
test.Show();
}
}
}
表单2.cs
...
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
private bool data7;
public Form2()
{
InitializeComponent();
}
public bool checkBox1
{
get { return data7; }
set { value = data7; }
}
private void Form2_Load(object sender, EventArgs e)
{
if (data7 == true)
{
label1.Text = "true";
}
else
{
label1.Text = "false";
}
}
}
}
set { value = data7; }
应该是
set { data7 = value; }
你的set
方法错了。它应该是
set { data7 = value; }
Form2
显然将值存储在变量data7
中,但不存储在复选框中。您必须执行类似操作才能将其实际存储在复选框中
public bool checkBox1
{
get { return myCheckBox.Checked; }
set { myCheckBox.Checked = value; }
}
另一个问题是将用户输入的结果返回给Form1
。由于您调用Form2
test.Show();
因此此语句后的代码立即继续,而不会关闭Form2
。改为致电test.ShowDialog();
。
在不阻止Form1
的情况下返回结果的另一个选项是使用事件。使用此定义
public class Form2ResultEventArgs : EventArgs
{
public Form2ResultEventArgs(bool checked)
{
this.Checked = checked;
}
public bool Checked { get; private set; }
}
在Form2
中,您将定义这样的事件。
public event EventHandler<Form2ResultEventArgs> Form2Result;
private OnForm2Result(bool checked)
{
var handler = Form2Result;
If (handler != null) {
handler(this, new Form2ResultEventArgs(checked));
}
}
// Assuming that you have a OK button on Form2
private OkButton_Click (...)
{
OnForm2Result(myCheckBox.Checked);
this.Close();
}
在形式1中
var test = new Form2();
test.Form2Result += ProcessResult;
test.Show();
...
private void ProcessResult(object sender, Form2ResultEventArgs e)
{
bool result = e.Checked;
...
}
更新
如果您只想设置标签,为什么不这样做
在形式 2 中
public void SetDisplay(bool value) {
label1.Text = value.ToString();
}
在形式1中
var test = new Form2();
test.SetDisplay(checkBox1.Checked);
test.Show();
请注意,InitializeComponent
是在 Form2
的构造函数中调用的,因此标签存在于 new Form2()
之后。无需在Form2_Load
中这样做.
我想建议当创建将值设置为 false 或 true 的布尔 data7 时,我不在乎,因为当用户第一次加载表单时,如果用户没有设置 CheckBox1,表单将崩溃。是的,我知道 OP 在给出的代码中确实设置了变量。
private bool data7 = false;
我已经在我的建议中包含了毛皮德沃雷茨基斯的答案 下面
...
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
//give the variable a default value
private bool data7=false;
public Form2()
{
InitializeComponent();
}
public bool checkBox1
{
get { return data7; }
//Here is Furs Correction
set { data7 = value; }
}
private void Form2_Load(object sender, EventArgs e)
{
if (data7 == true)
{
label1.Text = "true";
}
else
{
label1.Text = "false";
}
}
}
}
如果你没有在get或set中对data7做任何事情(例如验证(,那么就去掉它们。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public bool checkBox1 { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
if (checkBox1)
{
label1.Text = "true";
}
else
{
label1.Text = "false";
}
}
}