C#设置来自外部类的CheckBox值

时间:2013-04-21 10:11:25

标签: c# checkbox

我有外部课程,可以用我的表格做一些工作。 我有一些错误,无法处理它。

我的第一个变种

mainForm.CheckBox1.Checked = true;

它不适用于错误
跨线程操作无效:控制'CheckBox1'从其在

上创建的线程以外的线程访问

所以我在下面的帖子中尝试过 stackoverflow question 1 但是当我写作

mainForm.CheckBox1.IsCheked = true

编译器给出了一个错误 错误是'System.Windows.Forms.Control'不包含'IsChecked'的定义,并且没有扩展方法'IsChecked'接受类型'System.Windows.Forms.Control'的第一个参数可以找到(你是否遗漏了) using指令或程序集引用?)

我看到并找到了答案 srackoverflow question 2

但是当我写

时,我无法投射我的物体
(CheckBox)mainForm.CheckBox1.IsCheked = true

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

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

2 个答案:

答案 0 :(得分:1)

如果我正确理解你有几个选择......静态函数没有与它们相关联的实例,所以他们不知道你的复选框是什么,如果你想保持静态功能那么你需要将复选框传递给静态函数,尽管这不太实用..

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

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

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

答案 1 :(得分:0)

使用CheckBox参数为第二个类创建构造函数。

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

所以在mainForm中创建一个SecForm实例并为它传递checkBox并在secForm中修改Checked属性。

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