从外部类设置复选框值

本文关键字:复选框 设置 从外部 | 更新日期: 2023-09-27 18:10:08

我有外部类做一些工作与我的形式。我有一些错误,我们无法处理。

我的第一个变种

mainForm.CheckBox1.Checked = true;

它不工作,出现错误
跨线程操作无效:控制'CheckBox1'从创建它的线程以外的线程访问

所以我尝试了下面的帖子Stackoverflow问题1但是当我写

mainForm.CheckBox1.IsCheked = true

编译器给出一个错误
错误是"System.Windows.Forms"。Control'没有包含'IsChecked'的定义,也没有扩展方法'IsChecked'接受类型为'System.Windows.Forms '的第一个参数。Control'可以找到(您是否缺少using指令或程序集引用?)

我看到并找到了答案问题2

但是我不能强制转换对象因为当我写

(CheckBox)mainForm.CheckBox1.IsCheked = true

它给出了一个错误,无法找到名称空间或名称空间(您是否缺少using指令或程序集引用?)我有using System.Windows.Forms;在课堂的开始。

我是c#的初学者,所以你可以给我一些建议我做错了什么?

从外部类设置复选框值

如果我理解正确,你有几个选择…静态函数没有关联的实例,所以它们不知道你的复选框是什么,如果你想保留你的静态函数,那么你需要将复选框传递给你的静态函数,尽管这不是很实际。

public static void SetCheck(Checkbox c, bool value)
{
    c.Checked = value;
}

这是不实际的原因是,如果你知道复选框,那么你可能只是设置复选框,你可以在你的主窗体上提供一个Checked属性,只允许你的复选框的复选值被改变。

public bool IsMyCheckboxChecked
{
    get{ return checkBox1.Checked;}
    set{ checkBox1.Checked = value;}
}

如果这是你想设置的父窗体,你可以通过

访问它

((MainForm)this.ParentForm).IsMyCheckboxChecked = true

编辑作为方法

public void SetCheckbox(int num, bool state)
{
    checkboxList[num].Checked = state;
}

为第二个类创建一个带CheckBox参数的构造函数。

    private readonly CheckBox _externalCheckBox = null;
    public SecForm(CheckBox externalCheckBox)
    {
        _externalCheckBox = externalCheckBox;
        InitializeComponent();
    }

所以在mainForm中创建一个SecForm的实例,并为它传递复选框,并在SecForm中更改Checked Property。

    private void ChangeCheck(bool value)
    {
        _externalCheckBox.Checked = value;
    }