在Visual c#中访问MainForm文本框数据

时间:2011-08-25 13:09:08

标签: c# winforms

我有一个带有多个文本框的表单。我想创建一个类(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构造函数从文本框中提取值并在内部存储。

所以基本上我需要建议用于执行此操作的常用模式,因为我一直在搜索,但一直无法找到解决方案。

感谢您提供的任何解决方案!

4 个答案:

答案 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设为公开。只需在“设计/修改器”下的文本框的属性窗口中选择,然后选择“公共”。