[英]Access Form Method from another static class
所以,我現在幾乎沒有線索,甚至不確定它是否可能。 我有一個Visual C#Form,它由Program.cs運行(標准方式 - 當然VS完成了所有設置工作)。
除此之外,我在一個單獨的C#文件中有一個帶靜態方法的類,只是因為我喜歡將一個類保存在一個文件中。
我的表單代碼有一個公共函數:
public void print(String text)
{
rtb_log.appendText("\n" + text);
}
在某個時間點,我從另一個類調用靜態函數。
是否有可能從我的其他課程實際訪問該打印方法? 因為它指的是rtb_log(一個富文本框),所以只有實例化才有效,當然也不是靜態的。 但是因為靜態方法只能訪問靜態成員,所以我在這里有點想法如何在另一個類的表單上附加一些文本。
這里有什么幫助?
但是因為靜態方法只能訪問靜態成員,所以我在這里有點想法如何在另一個類的表單上附加一些文本。
靜態成員可以訪問實例成員 - 他們只需要知道調用該方法的實例。 所以你可以寫:
public static void Foo(OtherForm myOtherForm)
{
// Do some stuff...
myOtherForm.Print(); // Case changed to comply with naming conventions
}
然后,當您調用該方法時,您需要提供相關表單的引用。 基本上東西已經確定要調用的實例Print
上。 弄清楚誰擁有這些信息,然后從那里傳遞信息。 我建議不要使用靜態變量來保存這些信息。 (全局州使代碼更少可重用,更難以推理,並且更難測試。)
編輯:鑒於評論,這聽起來像你想要的:
// Within the form
private void HandleClick(object sender, EventArgs e)
{
SomeClass.StaticMethod(this);
}
見下文
class SomeMainClass
{
private ClassB form = null;
private void SomeMethod()
{
form = new ClassB();
form.Show();
ClassA foo = new ClassA(this);
}
// Use an accessor.
public ClassB Form
{
get { return this.form; }
}
}
class ClassA
{
private SomeMainClass mainClass = null;
// Constructor.
public ClassA(SomeMainClass _mainClass)
{
this.mainClass = _mainClass;
}
private void SomeMethod()
{
this.mainClass.Form.Print("Something to print");
}
}
class ClassB : Form
{
// Constructor.
public ClassB()
{
InitializeComponent();
}
public void Print(String text)
{
rtb_log.appendText("\n" + text);
}
}
編輯:這是回應您的評論的基本方法。 在資源方面不是那么高效,而是做你想要的......
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.