Visual C#从其他类文件访问项目

问题描述:

即时编写在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 
    } 
} 
} 

可以通过多种方式完成。我最喜欢的是通过传递“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

你不想这样做。你可以例如这样做:

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";

从你的问题来看,这不是很清楚,但我假设你的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