我正在尝试从不同的类调用一个方法但没有成功。
我的程序中有一个CheckBox
checkBox1,我有一个按钮,当我点击它时我想取消选中checkBox1。
如果我将I方法放在同一个文件中,那么一切正常:
public void close()
{
checkBox1.IsChecked=false;
}
但是,如果我创建一个单独的类文件(类Close),并放在那里(在相同的命名空间中,并使用“使用”所需的元素)。没有办法让它发挥作用。我尝试将该类实例化为:
Close operation = new Close();
operation.close();
我也尝试将close方法设置为静态,但我不可能,因为在我的真实程序中,我有很多变量会给我一个错误,因为它们是“非静态的”(?)。
我注意到如果我以这种方式调用方法,MessageBox.Show("Hello");
有效,但checkBox1仍未更改。我该怎么办?
答案 0 :(得分:2)
面向对象编程的基本原则是Encapsulation。这意味着类只知道并操作类的内部成员变量。
在您的情况下,类Close
不知道名为checkBox1
的控制变量的任何内容,因此,方法close
(如上所述)无法运行。它甚至无法编译!相反,当方法close
是Window类的一部分时,它按预期工作,因为控件变量checkbox1
是窗口类的成员变量
但是,如果我了解您的意图,我建议您避免创建单独的类来处理用户界面操作。让与UI元素一起使用的代码保留在定义元素的类中。
答案 1 :(得分:-1)
CheckBox.IsChecked
返回类型为bool
的值,如果您尝试实际更改复选框的值(即选中或未选中),则需要使用其他属性。< / p>
尝试:
public void close()
{
checkBox1.Checked = true;
}
这假设Close
类确实在其中有一个CheckBox
控件...你的问题相当模糊,坦率地命名一个方法close可能不是最好的做法{{ 1}}是WinForms中许多类的一种相当常见的方法。