Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从外部类设置复选框值_C#_Checkbox - Fatal编程技术网

C#从外部类设置复选框值

C#从外部类设置复选框值,c#,checkbox,C#,Checkbox,我有一个外部课程,可以用我的表格做一些工作。 我有一些错误,我无法处理 我的第一个变种 mainForm.CheckBox1.Checked = true; 它在出现错误时不起作用 跨线程操作无效:从创建控件“CheckBox1”的线程以外的线程访问控件“CheckBox1” 所以我在下面的帖子里试过 但是当我写的时候 mainForm.CheckBox1.IsCheked = true 编译器给出了一个错误 错误为“System.Windows.Forms.Control”不包含“IsCh

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

我的第一个变种

mainForm.CheckBox1.Checked = true;
它在出现错误时不起作用
跨线程操作无效:从创建控件“CheckBox1”的线程以外的线程访问控件“CheckBox1”

所以我在下面的帖子里试过 但是当我写的时候

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

我看到了答案

但我不能投射我的物体,因为当我写作时

(CheckBox)mainForm.CheckBox1.IsCheked = true
它为复选框提供了一个无法找到名称或命名空间(是否缺少using指令或程序集引用?)的错误。我已经
使用System.Windows.Forms


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

如果我理解正确,你有两个选择…静态函数没有与它们关联的实例,因此它们不会理解你的复选框,如果希望保留静态函数,则需要将复选框传递给静态函数,尽管这不是很实际

public static void SetCheck(Checkbox c, bool value)
{
    c.Checked = value;
}
这不实用的原因是,如果您知道复选框,那么您可能只需要设置复选框,您可以在主窗体上提供一个Checked属性,只允许更改复选框的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中传递该实例的复选框和chenge Checked属性

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

在线程功能期间是否需要设置选中状态?(或者可以在完成后完成)我有一些静态函数,它是从MainForm调用的。类似于
Dialogs.setCheckBox()其中对话框是带有函数的外部类。有必要创建新线程来设置复选框吗?听起来您已经在一个单独的线程上,“跨线程操作”如果您试图在静态函数上设置复选框,那么您必须将要设置的复选框传递到SetCheckBox参数中。谢谢回答,我会尝试。但是,我可以使用IsMyCheckBox和两个复选框,而不仅仅是一个复选框吗?类似于
public bool IsMyCheckboxChecked(复选框,cbNumber){…}
要做到这一点,您需要将复选框存储在列表或数组中,然后使用诸如“我的编辑”之类的方法,否则您可以使用反射,但这将是过度的。谢谢您的帮助。在我按照你说的做了之后,我在线程方面犯了一个错误。所以我使用委托访问我的复选框。这里可以找到一些委托的基本示例