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();
}
}
}
你不想这样做。你可以例如这样做:
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();
}
,并使用它。
对不起,我忘了提到它。为什么我不应该公开? – 2014-10-10 10:57:27
你不应该公开你的UI控件,因为它会破坏封装。如果你的richtextbox将是公开的 - 那么任何代码都可以访问它,修改它并用它做任何事情 - 甚至将它设置为null。相反,你应该向公众披露唯一用于操纵你的对象的方法。 – 2014-10-10 11:01:38
欢迎来到Stack Overflow。与其删除并重新发布相同的答案,您可以点击答案下方的“编辑”来改进它。 :) – CodeCaster 2014-10-10 11:37:52