【问题标题】:CheckBox Checked property not updating while form is running表单运行时 CheckBox Checked 属性未更新
【发布时间】:2017-06-05 17:08:23
【问题描述】:

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

每当我在运行表单之前将“已检查”属性更改为 false 时,我的代码都会按预期工作并将已检查属性的布尔变量视为 false。但是,如果我在表单实际运行时尝试更改复选框,我的代码总是将选中的属性视为 true,无论该框是否被选中。

我的代码不是 Form1_Load 一次性的东西,它是每次单击按钮时都会调用的函数。 (当然,这个按钮是在取消选中复选框后单击的,它仍然将复选框选中的变量视为真,即使它应该是假的。)

字面意思是我的代码:

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

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

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

有什么建议让它正确更新吗?

编辑:

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

它在新实例中被调用。

【问题讨论】:

  • 这是 WPF、WinForms、MVC 还是 WebForms?
  • 您能否提供与check1 的完整互动或分配?它可以设置在其他地方吗?
  • 在我们提供帮助之前,请先了解更多详情
  • 这可以绑定到 CheckBox.OnCheckedChanged 方法吗?从那里运行 Check1() ?
  • 好吧,那就是问题所在。您不是在处理正在显示的表单的同一实例。您需要将表单实例传递给其他类。

标签: c# forms checkbox


【解决方案1】:

假设你的表单类中有这样的东西:

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();
}

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

【讨论】:

  • 是的,只需将表单实例传递给类。复选框现在可以正确更新。
猜你喜欢
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2021-11-21
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多