我有外部课程,可以用我的表格做一些工作。 我有一些错误,无法处理它。
我的第一个变种
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#的初学者,所以你可以给我一些建议我做错了吗?
答案 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;
}