我不想创建一个对象,因为它不会影响我的可见形式。我怎样才能调用一个方法,以便它在事物的可见方面发挥作用。
public class foo
{
public void SetString(string foo)
{
label1.Text = foo;
}
}
在另一个班级里面:
foo X = new foo();
X.SetString("testlololol");
这会设置标签,但是很可能,我将无法在表单上看到它。
我怎么能做同样的事情,但在我可见的方面呢?
答案 0 :(得分:3)
创建可见表单时,在某些静态属性中存储对它的引用。然后其他类可以使用该属性来运行该类的公共方法。
// the original form
class MyForm()
{
// form public method
public void MyMethod() { ... }
}
// class storing the reference to a form
class MyOtherClass
{
public static Form MyForm;
public void ShowForm()
{
MyForm = new MyForm();
MyForm.Show();
}
}
// invoke form public method in this class
class YetAnotherClass
{
public void SomeMethod ()
{
MyOtherClass.MyForm.MyMethod();
}
}
答案 1 :(得分:1)
您需要以某种方式获取 可见的实例。从已经了解您的表单(或其他任何内容)到其他代码的内容中找出一些信息路径。考虑如果有两种可见形式会发生什么 - 你想要哪一种?这应该是一条前进的道路。如果你知道只有一个可见的实例,你可以使用一个单例 - 但我强烈建议你不要。
请记住,您可能不需要通过其完整的类型名称来了解它 - 如果这是跨越图层,您可能希望以某种抽象的方式计算出某些界面,包括该动作。
答案 2 :(得分:0)
您的第二个类需要引用可见的类的实例。
public class OtherClass{
foo myFoo;
public OtherClass( foo visibleFoo )
{
myFoo = visibleFoo;
}
public void method()
{
myFoo.SetString("testlolol");
}
}
答案 3 :(得分:0)
我通常会将表单的引用(在本例中为'foo')传递给另一个类。或者我会将'foo'的副本存储到某个静态位置。如果您知道只有1个'foo'实例,您可以执行以下操作:
public class foo
{
public static foo Current { get; private set; }
public foo()
{
foo.Current = this;
}
public void SetString(string foo)
{
label1.Text = foo;
}
}
...和...
foo.Current.SetString("testlololol");
虽然这有点hacky IMO,并且不支持'foo'的多个实例。