0

我有外部课程来处理我的表格。我有一些错误最终无法处理。

我的第一个变种

mainForm.CheckBox1.Checked = true;

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

所以我在 stackoverflow问题1之后尝试过, 但是当我写

mainForm.CheckBox1.IsCheked = true

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

我在srackoverflow 问题 2中看到并找到了答案

但我不能铸造我的对象,因为当我写

(CheckBox)mainForm.CheckBox1.IsCheked = true

它给出了 CheckBox 的错误 Can't find name of or namespace (你是否缺少 using 指令或程序集引用?)。我有using System.Windows.Forms;在上课的开始。

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

4

2 回答 2

1

如果我理解正确,您有几个选择...静态函数没有与之关联的实例,因此他们将不了解您的复选框是什么,如果您希望保留静态函数,则需要通过在您的静态函数的复选框中,虽然这不是很实用..

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;
}
于 2013-04-21T10:57:09.000 回答
0

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

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

所以在 mainForm 中创建一个 SecForm 的实例并为其传递 checkBox 并在 secForm 中 chenge Checked 属性。

    private void ChangeCheck(bool value)
    {
        _externalCheckBox.Checked = value;
    }
于 2013-04-21T11:55:45.813 回答