簡體   English   中英

從另一個靜態類訪問表單方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM