c#从一个表单到另一个表单获取复选框值

本文关键字:表单 另一个 复选框 获取 一个 | 更新日期: 2023-09-27 18:15:09

经过几个小时的困惑,我想我错过了这里显而易见的东西。我相信没有这么难。我有一个表单(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。我想我们可能已经处理了它,我似乎不能再得到它的价值了。正如我在尝试了几个小时后所说的,我显然忽略了显而易见的东西。如果有一个更简单的方法获得复选框的值从一种形式到另一种请让我知道。

c#从一个表单到另一个表单获取复选框值

表单将不会被处理(除非你在你省略的代码的其他地方这样做),因为你在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
    }
 }