递归组件列表后文本框属性变回

Posted

技术标签:

【中文标题】递归组件列表后文本框属性变回【英文标题】:Textbox property changes back after recursive component list 【发布时间】:2012-12-12 03:42:24 【问题描述】:

我有一个带有控件的 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”

【问题讨论】:

文本框正在改回值是一个问题...问题是问题... 【参考方案1】:

我已经看到在为 TabPage 上存在的控件设置值时发生这种情况,但尚未使其可见。换句话说,因为TabPage 尚未可见,所以该行...

textBox.Text = "123";

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

这是TabControl 进行的不幸优化。

【讨论】:

有道理,这一切都发生在 form.show 之前 PS:所有代码都已执行(我用断点测试过) @Rafael,是的,这不是你能改变的,你只需要解决它。 我会测试它并返回结果。谢谢 代码被执行并且在递归调用之后值已经改变。在表格显示之前。我在调试器中检查了 Text 属性。 @Rafael,请记住,对于第一个 TabPage 上的控件,它确实有效(取决于我何时设置 Text 属性),但对于随后隐藏的 @987654328 上的控件从未起作用@的。

以上是关于递归组件列表后文本框属性变回的主要内容,如果未能解决你的问题,请参考以下文章

VB中,让文本框文字居中的设置,怎么搞?

易组件——核心组件

AI开发实战4-文本输入框(TextBox)的定制1

Delphi 之 编辑框控件(TEdit)

WPF 文本框没有单击事件吗?如果想用单击事件怎么处理

VC++列表框控件问题!会的进来下