2017-10-17 44 views
-2

我试图将我的程序分成类以减少混乱和增加可读性。C#WinForms'this.Controls.Find'在一个单独的类

在我的一种方法中,我需要在屏幕上找到标签的位置。

this.Controls.Find工作之前,我都感动到单独的类,但因为我不再是同一类的控件执行它不存在了。我尝试Main.Controls.Find(Main.cs是我的表单被执行和设置的地方),但是这也不起作用,并且我得到错误:“非静态字段,方法或属性Control需要对象引用。 Controls'“

如何引用控件?我是否需要添加额外的使用语句?

感谢,

乔希

+1

您需要的表单对象的引用。班内容易,移动时不容易。考虑将它传递给构造函数。 –

+0

了解更多关于['Class'](https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/classes)以及创建对象实例的信息。 –

回答

0

你需要一个参考的形式流传下来新近出台的方法(或类)。

之前

public class Main : Form { 

    public void Whatever() { 
     ... 
     this.Controls.Find(...); 
    } 
} 

public class Main : Form { 

    public void Whatever() { 
     ... 
     new Helpers().HelperMethod(this); 
    } 
} 

public class Helpers { 

    public void HelperMethod(Form form) { 
     ... 
     form.Controls.Find 
    } 
} 

public class Main : Form { 

    public void Whatever() { 
     ... 
     new Helpers(this).HelperMethod(); 
    } 
} 

public class Helpers { 

    private Form Form { get; set; } 
    public Helpers(Form form) { 
     this.Form = form; 
    } 

    public void HelperMethod() { 
     ... 
     this.Form.Controls.Find 
    } 
} 
+0

谢谢Wiktor ... –