2014-10-10 72 views
0

即時編寫在Visual Studio中的應用程序,並試圖從其他類訪問富文本框。這似乎不適用於我。另外如何從其他類調用函數?Visual C#從其他類文件訪問項目

我的代碼:

namespace Test{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     // I want from this place to access the MyClass.test("hello"); 
    } 
} 
} 

namespace Test{ 
class MyClass 
{ 
    public void test (string text) 
    { 
    // here i want to do richtextbox1.clear(); but the textbox is not available 
    } 
} 
} 

回答

0

可以通過多種方式完成。我最喜歡的是通過傳遞「this」指針作爲參數來在「Form1」中聲明「MyClass」類的對象。因此,「MyClass」類的對象將可以訪問所有成員和公共函數「Form1」。包含RichTextBox1。

namespace Test{ 
    public partial class Form1 : Form 
    { 
    MyClass MyClassObject; 
     public Form1() 
     { 
      InitializeComponent(); 
      MyClassObject=new MyClass(this); 
      MyClassObject.test("hello"); 
     } 
    } 
    } 

namespace Test{ 
    class MyClass 
    { 

     Form1 parent; 

     public MyClass(Form1 parentForm) 
     { 
      parent=parentForm; 
     } 
     public void test (string text) 
     { 
     parent.richtextbox1.clear(); 
     } 
    } 

}

+0

歡迎來到Stack Overflow。與其刪除並重新發布相同的答案,您可以點擊答案下方的「編輯」來改進它。 :) – CodeCaster 2014-10-10 11:37:52

0

你不想這樣做。你可以例如這樣做:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     var myClass = new MyClass(this.richtextbox1); 
     myClass.SetTextBoxText("hello"); 
    } 
} 

class MyClass 
{ 
    RichTextBox _textBox; 
    public MyClass(RichTextBox textBox) 
    { 
     _textBox = textBox; 
    } 

    public void SetTextBoxText(string text) 
    { 
     _textBox.Clear(); 
     _textBox.Text = text; 
    } 
} 

這使用構造函數注入來傳遞文本框來操作contstructor。在Form1的構造函數中,MyClass通過引用文本框實例化,該文本框在InitializeComponent()中初始化。然後,當您撥打SetTextBoxText時,該類將清除關聯的文本框的文本,然後將其設置爲傳遞的文本。

這是比常用建議的方法更具體的:只是通過整個Form1實例MyClass的構造使得文本public之後,但這樣你不能爲其他形式的重用MyClass

但是,正如你所看到的那樣,這樣做毫無意義。您可以直接讓Form1包含this.richttextbox1.Text = "hello";

0

從你的問題來看,這不是很清楚,但我假設你的richtextbox1位於Form1

默認情況下,表單的所有UI元素都有private acess修飾符 - 這就是爲什麼您無法從外部類訪問您的richtextbox1

您可以將其訪問mmodifier更改爲public - 但我強烈鼓勵您不要這樣做。

而是寫一些方法Form1類像

public void ClearRichTextBox() 
{ 
    richtextbox1.Clear(); 
} 

,並使用它。

+0

對不起,我忘了提到它。爲什麼我不應該公開? – 2014-10-10 10:57:27

+0

你不應該公開你的UI控件,因爲它會破壞封裝。如果你的richtextbox將是公開的 - 那麼任何代碼都可以訪問它,修改它並用它做任何事情 - 甚至將它設置爲null。相反,你應該向公衆披露唯一用於操縱你的對象的方法。 – 2014-10-10 11:01:38

相關問題