Reputation: 15
I am a beginner to c# and windows forms. I want to use Controls.ControlsCollection.Find to find multiple textboxes (present in groupboxes) in the form. (Please note that the groupboxes are loaded dynamically during runtime using a button in the form).
I have used for loop to vary the name of the control(TextBox) to find(Tb{a}). Then I use foreach loop to access the controls in the array.
I tried using for loop to vary the name of the textbox. I was expecting it to create a control array with those textboxes. Later, I will convert the value to float and add it to '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;
}
The error I am getting is: Error CS0103 The name 'textboxes' does not exist in the current context. How to fix this?
All help is appreciated. Thank you.
Upvotes: 0
Views: 351
Reputation: 1073
The variable has to be defined outside of the loop.
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;
}
Upvotes: 1