winforms 使用Control.ControlCollection查找windows窗体应用程序中的多个控件,当控件名称更改时查找

r55awzrz  于 2023-03-03  发布在  Windows
关注(0)|答案(1)|浏览(116)

我是c#和windows窗体的初学者。我想使用controls.controlscollection.find来查找窗体中的多个文本框(存在于组框中)。(请注意,组框是在运行时使用窗体中的按钮动态加载的)。
我已经使用for循环来改变要查找(Tb {a})的控件(TextBox)的名称,然后使用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名称'textboxes'在当前上下文中不存在。如何修复此问题?
感谢你的帮助。谢谢。

wlsrxk51

wlsrxk511#

变量必须在循环外定义。

private float FindTextBoxes()
    {
        List<TextBox> textboxes = new List<TextBox>();
        float L = 0;
        for (int i=1; i < a+1; i=i+2)
        {
            textboxes.AddRange(Controls.Find($"Tb{i}",true).OfType<TextBox>());
        }

        foreach (TextBox ctrl in textboxes)
        {
            L += float.Parse(ctrl.Text);
        }           
        return L;
    }

相关问题