我有一个名为 form1 的表单,当我尝试从 class1 获取 form1 中的文本框中的文本时,我还有一个名为 class1 的类。从字面上看,我花了两天时间才弄清楚获取文本的正确方法。
见下面的代码:
我有以下课程:
class Class1
{
// field to hold the Form1 object reference
private Form1 DataEntryForm;
// Class1 constructor
public Class1(Form1 form)
{
// store the Form1 object reference
DataEntryForm = form;
}
public void gettext()
{
//the following doesn't work..
string textintextbox = DataEntryForm.textBox1.text;
//I get the following error => somenamespace.Form1.textBox1 is inaccessible due to its protection
//but the following code works just fine.... why?
textintextbox = ((TextBox)DataEntryForm.Controls.Find("textBox1",true).FirstOrDefault()).Text;
}
}
如您所见,我知道我必须在 class1 中声明对表单的引用,然后像“myform1refence.textbox1.text”一样访问文本框,但是如果您查看上面的代码,这不起作用,因为 textbox1 是私有的。所以我在谷歌上喜欢解决这个问题,无论我走到哪里,人们都建议我“不应该”将 textBox1 公开,因为它是糟糕的编程或其他东西,但我应该像这样创建一个公共变量
public partial class Form1 : Form
{
public sometype somevariablename {get { return somePrivatevariablename; } set { somePrivatevariablename = value; }}
}
所以我认为这是我应该从 class1 访问我的 textbox1 的正确方法所以我写了以下内容
public partial class Form1 : Form
{
public TextBox _textBox1 {get { return this.textBox1; } set { this.textBox1 = value; }}
}
因此,当我在 class1 中键入以下内容时,它可以工作!
展览A
string textintextbox = DataEntryForm.textBox1.text;
所以一天我继续编码并接受这是我问题的最佳解决方案。然后偶然我偶然发现了以下代码:
展览B
string textintextbox = ((TextBox)DataEntryForm.Controls.Find("textBox1",true).FirstOrDefault()).Text;
使用上面的代码,我不需要在为 textBox1 创建公共 getter 和 setter 时将 textbox1 公开,我需要做的就是创建一个 form1 引用。
所以我的问题是,为什么展览 B 仅使用对表单的引用,但展览 A 需要对表单的引用和被访问的变量才能公开工作。为什么这是……我错过了什么?