我有一个带控件的TabControl表单。
在表格实例之后,我调用一个函数来准备它来重现值。
该函数将Text属性从“0”更改为某个值。 稍后,我调用一个继承的函数,递归列出表单上的所有TextBox并添加到对象列表
当递归函数结束时,我查看列表,我的文本框具有前一个值。
有条件的信息
// 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”,然后我调用recusrive函数,当此递归函数返回时,该值将更改回“0”
答案 0 :(得分:2)
我在TabPage
上尚未显示的控件上设置值时发生了这种情况。换句话说,因为TabPage
尚未显示,所以行......
textBox.Text = "123";
...不会失败,但它也没有做任何事情。我可以解决这个问题的唯一方法是将值存储在某种缓存变量中,然后使用控件的OnVisibleChanged
并在那里设置值。
这是由TabControl
进行的不幸优化。