1

我有一个带有控件的 TabControl 表单。

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

该函数将 Text 属性从“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() 内部:

// Value is "123"
List<Control> lstControls = new List<Control>();

foreach (Control c in this.Controls)
{
    ListControls(lstControls, c);
} 

// The textbox on the list has the old value ("0") <- Edited

protected void ListControls(List<Control> Controls, Control control)
    {
        if (control.HasChildren)
        {
            foreach (Control c in control.Controls)
            {
                ListControls(Controls, c);
            }
        }
 }

编辑:表单调用 InitializeComponent() 并用“0”填充文本框,然后 form_load 返回。我将值更改为“123”并调用PrepareForm(),调用后文本框值为“123”,然后我调用recursive函数,当该递归函数返回时,值变回“0”

4

1 回答 1

2

TabPage我已经看到在为尚未显示的控件上存在的控件设置值时发生这种情况。换句话说,因为TabPage还没有被看到,这条线......

textBox.Text = "123";

...不会失败,但它也没有做任何事情。我可以解决这个问题的唯一方法是将值存储在某种缓存变量中,然后使用控件OnVisibleChanged并在那里设置值。

这是由TabControl.

于 2012-12-26T16:08:01.453 回答