[英]Call Methods from another class c#
在另一個類中調用方法時,我遇到了一個簡單的問題。
我在不同的 class 文件中有很多類似的代碼,我認為我可以使用我經常使用的方法創建一個全局 class。
但我不知道如何正確地做到這一點。
請檢查我下面的代碼並告訴我它可能是什么錯誤。
另外,請告訴我是否可以做不同的事情?
Form1
僅包含一個按鈕。
namespace GlobalMethod
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void ChangeTextInButton1(string newText)
{
button1.Text = newText;
}
private void Button1_Click(object sender, EventArgs e)
{
GlobalMethods gm = new GlobalMethods();
gm.ChangeTextButtonFromOtherClass();
}
}
public class GlobalMethods
{
public void ChangeTextButtonFromOtherClass()
{
Form1 f1 = new Form1();
f1.ChangeTextInButton1("NEW BUTTON NAME");
}
}
}
當我調用這些方法時效果很好, string
被傳遞給ChangeTextInButton1()
但button
中的Text
沒有改變,我不知道為什么。
您應該提供對現有表單的引用以對其進行修改,而不是創建新表單。 為此,將依賴項注入到GlobalMethods
的構造函數中:
class GlobalMethods
{
private readonly Form1 form;
public GlobalMethods(Form1 f) { this.form = f; }
}
現在您可以在ChangeTextButtonFromOtherClass
方法中引用該表單:
public void ChangeTextButtonFromOtherClass()
{
this.form.ChangeTextInButton1("NEW BUTTON NAME");
}
最后,您需要在 click-eventhandler 中提供該引用:
private void Button1_Click(object sender, EventArgs e)
{
GlobalMethods gm = new GlobalMethods(this);
gm.ChangeTextButtonFromOtherClass();
}
除了將引用傳遞給GloablMethods
的構造函數之外,您還可以將其提供給ChangeTextButtonFromOtherClass
-方法本身。
您正在 GlobalMethods 中創建 From1 的新實例。
因此,如果您期望調用 globalmethods 的 Form1 的現有實例會發生變化,那么這是不正確的。
如果你想“共享”這樣的代碼,那么 static 方法是一種方法。 所以你也不需要每次都新建一個 GlobalMethods 實例,然后傳入你要更新的 Form1 實例即可。
public static class GlobalMethods
{
public static void ChangeTextButtonFromOtherClass(Form1 f1)
{
f1.ChangeTextInButton1("NEW BUTTON NAME");
}
}
(我假設此 class 中沒有其他方法,並且您不需要為其他目的啟動它的實例)
話說回來。 如果真的只有 1 行代碼,就這么簡單,那么雖然你在技術上打破了“不要重復自己”的規則,但不值得擁有一個新的 class 來執行此操作。 只需重復同一行代碼。
話說回來!
如果你有多個 forms 做同樣的事情。 然后,您應該創建一個新的表單 class 來實現此功能,然后您的所有 forms 都可以從該新的父表單繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.