CheckBox Checked属性在表单运行时不更新

时间:2017-06-05 17:08:23

标签: c# forms checkbox

我有一个简单的函数,它返回是否选中复选框,另一个类的另一个方法使用此信息。

每当我改变" Checked"在运行表单之前将属性设置为false,我的代码按预期工作,并将checked属性的boolean变量视为false。但是,如果我在窗体实际运行时尝试更改复选框,则无论是否选中该框,我的代码始终将checked属性视为true。

我的代码不是Form1_Load一次性的东西,它是每次单击按钮时调用的函数。 (当然,在复选框未被遮挡后单击了此按钮,它仍然将复选框选中的变量视为true,即使它应该为false。)

字面意思我的代码:

(我知道这看起来像是一种奇怪的方法来检查它,但由于类到类的引用问题需要它)

    public bool Check1()
    {
        check1 = this.checkBox1.Checked;
        return check1;
    }

检查1();无论是否选中checkBox1,始终返回true。但同样,如果我在运行表单之前取消选中该复选框,它将返回false。

有任何建议让它正确更新吗?

编辑:

                Block_Map_Array.Form1 f = new Block_Map_Array.Form1();

在新实例中调用它。

1 个答案:

答案 0 :(得分:0)

假设您在表单类中有类似的内容:

public partial class Form1 : Form
{
    private bool check1;

    public bool Check1()
    {
        check1 = this.checkBox1.Checked;
        return check1;
    }

    // rest of class omitted
}

并且您希望其他类可以访问UI表单的此实例方法,您需要为表单提供一种将自身传递给其他类的方法,例如:

class Block_Map_Array
{
    private Form1 f;

    public Block_Map_Array(Form1 uiInstance)
    {
        this.f = uiInstance;
    }

    public void SomeMethod()
    {
        if (f.Check1())
        {
            // do something...
        }
    }

    // rest of class omitted...
}

然后,当您从form1实例化此类时,您可以执行以下操作:

private void Form1_Load(object sender, EventArgs e)
{
    Block_Map_Array foo = new Block_Map_Array(this);

    foo.SomeMethod();
}

当然,这不是最好的设计。通常,您会将一些数据直接传递给表单中的方法,而不是整个表单实例。