【问题标题】:Best way to retrieve values from lots of Winform controls?从许多 Winform 控件中检索值的最佳方法是什么?
【发布时间】:2017-07-06 06:42:09
【问题描述】:

我正在做一个项目,该项目需要我设计一个包含大量文本字段和几个按钮的表单。由于 Visual Studio 的自动生成代码,我有大约 150 多个文本字段,我需要能够从与表单分开的类中获取值。

表单的一部分是每个选项卡都包含相似的布局,但它们之间存在细微差别。由于选项卡的工作方式,我必须为选项卡之间共享的每个字段使用不同的名称,而不是能够访问相对于指定选项卡的该字段。这就是导致如此多的表单控件的原因。

我的问题是...目前我正在研究一个类,以允许我从所有这些文本字段中获取值并在文档模板(Word XML 文件)上运行字符串替换以覆盖占位符相关文本字段中的值。有没有比仅仅为表单的每个成员创建一个访问器方法并使用它来将值传递给 string.Replace() 方法更有效的方法?

我是 C# 新手,所以这是我能想到的解决问题的唯一方法。

【问题讨论】:

  • 听起来您的数据比创建 150 多个文本框更适合放置在 DataGrid 中。您是否与 WinForms 相关联,或者是否可以选择切换到 WPF?在任何情况下,您都不需要为每个控件创建访问器 - 只需通过 TextBox1.Text 等(或您的控件名称)访问它们。

标签: c# winforms


【解决方案1】:

如果我正确理解您的问题,您希望为您的 WinForm 应用程序批量更新所有文本框控件。

幸运的是,WinForm 控件大多派生自 Control 类,该类提供 Control 对象的 .Name 和 .Text。

您可以使用以下代码做到这一点:

// Loop through all controls in the form
foreach(Control control in this.Controls)
{
   if(control is TextBox)
   {
      // DO WORK
   }
}

您可以通过调用control.Textcontrol.Name 来访问循环内的名称或文本。

这能回答你的问题吗?

【讨论】:

  • 值得注意的是,如果需要 TextBox 特定字段,请使用 (control as TextBox) 来访问它们。在检查它当然是一个 TextBox 之后。
  • “名称”是指返回一个字符串,其中包含与文本框关联的变量的名称?
  • @DarinBeaudreau - 是的。假设您从工具箱拖放一个默认为“textbox1”的文本框控件control.Name 将返回“textbox1”。同样,如果文本框的值为“Hello World”,那么control.Text 将返回“Hello World”。
  • 是这样想的。我最初想这样做,并且正在寻找获取变量名字符串的方法。我应该意识到名称字段是可访问的。我仍然不确定通过它们的最佳方法是什么。不过谢谢!
  • 如果您需要进一步的帮助,请发布您的代码,我可以随时改进我的答案以阐明进一步的步骤。
猜你喜欢
  • 2011-06-29
  • 2010-12-05
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多