使用 Control.ControlCollection.Find 在窗口窗体应用程序中查找多个控件,当控件的名称发生变化时

问题描述 投票:0回答:1

我是 C# 和 Windows 窗体的初学者。我想使用 Controls.ControlsCollection.Find 在表单中查找多个文本框(存在于组框中)。 (请注意,组框是在运行时使用表单中的按钮动态加载的)。

我使用 for 循环将控件 (TextBox) 的名称更改为 find(Tb{a})。 然后我使用 foreach 循环访问数组中的控件。

我尝试使用 for 循环来改变文本框的名称。我期待它用这些文本框创建一个控件数组。稍后,我会将值转换为 float 并将其添加到 'L'

private float FindTextBoxes()
{
     for (int i=1; i < a+1; i=i+2)
     {
         Control[] textboxes = this.Controls.Find($"Tb{i}",true);
     }
     float L = 0;
     foreach (Control ctrl in textboxes)
     {
         if (ctrl.GetType() == typeof(TextBox))
          {
              L = L + float.Parse(((TextBox)ctrl).Text);
          }
     }           
     return L;
}

我得到的错误是: 错误 CS0103 当前上下文中不存在名称“文本框”。 如何解决这个问题?

感谢所有帮助。 谢谢。

c# .net winforms findcontrol
1个回答
0
投票

变量必须在循环外定义。

private float FindTextBoxes()
{
     Control[] textboxes
     for (int i=1; i < a+1; i=i+2)
     {
         textboxes = this.Controls.Find($"Tb{i}",true).OfType<TextBox>();
     }
     float L = 0;
     foreach (Control ctrl in textboxes)
     {
         L = L + float.Parse(((TextBox)ctrl).Text);
     }           
     return L;
}
© www.soinside.com 2019 - 2024. All rights reserved.