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

时间:2014-10-10 10:45:20

标签: c# visual-studio-2012

我正在Visual Studio中编写一个应用程序,我试图从其他类中访问一个富文本框。这似乎对我没用。另外如何从其他类调用函数?

我的代码:

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
    }
}
}

3 个答案:

答案 0 :(得分: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的构造函数,但这样就无法重用{{} 1}}用于其他形式。

但是如你所见,这样做毫无意义。您可以让MyClass直接包含Form1

答案 1 :(得分:0)

您的问题并不十分清楚,但我假设您的richtextbox1位于Form1

默认情况下,表单的所有UI元素都有private访问修饰符 - 这就是为什么您无法从外部类访问richtextbox1的原因。

您可以将其访问模式更改为public - 但我强烈鼓励您不要这样做。

而是在Form1类中编写一些方法,如

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

并使用它。

答案 2 :(得分:0)

可以通过多种方式完成。我最喜欢的是声明" MyClass"的对象。在" Form1"通过"这个"指针作为参数。因此," MyClass"的对象class可以访问所有成员和公共函数" 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();
       }
    }

}