C# 在递归组件列表之后,Textbox属性会发生更改

C# 在递归组件列表之后,Textbox属性会发生更改,c#,winforms,inheritance,recursion,components,C#,Winforms,Inheritance,Recursion,Components,我有一个带有TabControl和controls的表单 在完成表单实例之后,我调用一个函数来准备接收值 该函数将文本属性从“0”更改为某个值。 几行之后,我调用了一个继承的函数,该函数递归地列出表单上的所有文本框并添加到对象列表中 当递归函数结束时,我查看列表,我的文本框具有上一个值 传统信息 // Textbox.text has "0" textBox.Text = "123"; //Other components change PrepareForm(); //in

我有一个带有TabControl和controls的表单

在完成表单实例之后,我调用一个函数来准备接收值

该函数将文本属性从“0”更改为某个值。 几行之后,我调用了一个继承的函数,该函数递归地列出表单上的所有文本框并添加到对象列表中

当递归函数结束时,我查看列表,我的文本框具有上一个值


传统信息

 // Textbox.text has "0"

    textBox.Text = "123";

 //Other components change

PrepareForm(); //inherited function that enumerates all TextBoxes (and other components) on that form in a list
内部PrepareForm():

//值为“123”
列表控件=新列表();
foreach(此.Controls中的控件c)
{
列表控件(lstControls,c);
} 

//列表上的文本框具有旧值(“0”)我在设置
选项卡页
上尚未显示的控件的值时看到过这种情况。换句话说,由于
选项卡页
尚未显示,因此该行

textBox.Text = "123";
…没有失败,但也没有任何作用。我能绕过这个问题的唯一方法是将值存储在某种缓存变量中,然后使用控件的
OnVisibleChanged
并在那里设置值


这是一个不幸的优化,由
选项卡Control

文本框进行更改,返回值是一个问题。。。问题是……这是有道理的,所有这些都发生在form.show PS:所有代码都被执行(我用断点测试过)@Rafael,是的,这不是你能改变的东西,你只需要解决它。我会测试它并返回结果。感谢代码被执行,在递归调用之后,值发生了变化。在表格显示之前。我在调试器中检查了Text属性。@Rafael,请记住,它确实对第一个
选项卡页上的控件起作用(取决于我何时设置
Text
属性),但对后续隐藏的
选项卡页上的控件不起作用。
protected void ListControls(List<Control> Controls, Control control)
    {
        if (control.HasChildren)
        {
            foreach (Control c in control.Controls)
            {
                ListControls(Controls, c);
            }
        }
 }
textBox.Text = "123";