我有一个带有多个文本框的表单。我想创建一个类(InputData
)来收集和存储这些数据,但我无法访问txtBox.Text
。我可以看到我被阻止的一些要点。即MainForm类中的私有文本框声明等.MainForm.Designer包含警告:
Required method for Designer support - do not modify
the contents of this method with the code editor.
因此,我无法在此处更改文本框的访问级别。另一个块可能是Mainform需要通过MainForm中的InitializeComponent()
方法实例化,因此文本框尚不存在。
我想到的解决方案涉及InputData
构造函数从文本框中提取值并在内部存储。
所以基本上我需要建议用于执行此操作的常用模式,因为我一直在搜索,但一直无法找到解决方案。
感谢您提供的任何解决方案!
答案 0 :(得分:3)
我遵循的WinForm应用程序的标准模式是创建一个Dialog数据模型(我称之为 - 我不建议我发明它或任何东西)。此类包含要从表单设置或检索的所有数据。每个表单都提供一致命名的 SetXXXData 和 GetXXXData 方法,用于填充模型或表单:
struct InputData
{
string Text;
}
然后以您的形式:
void MyForm::SetInputData(InputData data)
{
myControl.Text = data.Text;
}
void MyForm::GetInputData(InputData data)
{
data.Text = myControl.Text;
}
在你有一张包含大量数据的表格之前,这并不令人印象深刻。它将所有表单控件保留在表单中,并且不会将您的应用程序暴露给UI的内部工作。通过抽象出数据,您还可以在不影响呼叫者的情况下改变控制类型。
答案 1 :(得分:2)
如何将文本框值公开为MainForm的属性?这样,您就可以从任何其他有权访问MainForm的类访问它们。像这样:
public string TextBoxText
{
get
{
return textBox.Text;
}
}
答案 2 :(得分:2)
仅供参考,您可以通过更改设计器中的“Modifiers”属性来更改元素的访问级别。它有公共,受保护,私人等选项......
答案 3 :(得分:0)
您可以将TextBox设为公开。只需在“设计/修改器”下的文本框的属性窗口中选择,然后选择“公共”。