经过几个小时的困惑,我想我已经错过了这里显而易见的事了。我相信这并不困难。我有一个Form(CommTester),上面有一个复选框。在同一个表单上,我有一个ToolStrip,其中的项目将启动另一个表单(SetPrintGoDelay)。此表单需要知道是否选中表单1上的复选框。下面的代码段显示了我如何尝试获取CommTester表单并将其发送到SetPrintGoDelay表单。 (所有代码都有大量裁减,以使其更容易适应,问你是否认为我错过了重要的一点)
namespace comms_test
{
public partial class CommTester : Form
{
public CommTester()
{
InitializeComponent();
EnableControls();
btn_connect.Visible = true;
btn_disconnect.Visible = false;
toolStripStatusLabel1.Text = "Disconnected";
}
private void chkbx_log_CheckedChanged(object sender, EventArgs e)
{
SetPrintGoDelay form2;
form2 = new SetPrintGoDelay(this);
form2.Show();
}
public string checkboxchecked()
{
if (chkbx_log.Checked == true)
{
return "1";
}
else
{
return "0";
}
}
}
}
现在在SetPrintGoDelay表格中
namespace comms_test
{
public partial class SetPrintGoDelay : Form
{
CommTester main;
public SetPrintGoDelay(CommTester incomingform)
{
InitializeComponent();
main = incomingform;
MessageBox.Show(main.checkboxchecked().ToString());
}
private void btn_setprintgodelay_Click(object sender, EventArgs e)
{
if (main.checkboxchecked().ToString() == "1")
{
CommTester frm1 = new CommTester();
frm1.log_data(DataToLog); //go and log the data
}
}
所以在CommTester表单上,我勾选复选框,我得到它记录数据,但立即完成复选框值设置为0,即使它仍然被检查,它也不会再次将其选为1。我想我们可能已经处理掉了,我似乎无法再次获得价值。正如我说的经过几个小时的尝试后,我显然错过了显而易见的事情。如果有一种更简单的方法可以将复选框的值从一种形式转换为另一种形式,请告诉我。
答案 0 :(得分:1)
表单将不会被处理(除非您在省略的代码中执行此操作),因为您在SetPrintGoDelay中保留了引用。我建议不要传递“0”或“1”字符串来指示是否选中该复选框,而是使用布尔属性。如果不出意外,那将澄清正在发生的事情。
如果进行这些更改会发生什么?
在CommTester中:
public bool IsCheckboxChecked
{
get { return chkbx_log.Checked; }
}
并在SetPrintGoDelay中:
private void btn_setprintgodelay_Click(object sender, EventArgs e)
{
if (main.IsCheckboxChecked)
{
CommTester frm1 = new CommTester();
frm1.log_data(DataToLog); //go and log the data
}
}