【发布时间】:2009-07-29 11:44:39
【问题描述】:
我有一个包含文本框的用户控件,我将其动态加载到表单上。
在表单启动时,我启动用户控件并将其可见性标签设置为“假”。
我想在用户控件变为可见时自动触发一个方法,因为此方法将一些输出写入文本框,此方法应仅在用户控件且其继承的所有控件对用户可见之后才开始执行。
我认为paintEventHandler 应该是在表单及其继承的控件在例如控件的可见性发生更改后重新绘制时触发的最后一个事件。
所以订阅paintEventHandler应该在表单完全重绘后触发我订阅的方法,但显然不是,我的方法在我的文本框仍然隐藏时执行,只有在方法完成执行后才可见。
对此有什么想法吗?
private void processControl_SetActive(object sender, CancelEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
this.Paint += new PaintEventHandler(processControl_Paint);
});
}
void processControl_Paint(object sender, PaintEventArgs e)
{
//Should only be called when everything is fully loaded and visible on the form.
//Application.DoEvents() ->probably bad idea??
AddStuffToTextBox();
}
【问题讨论】:
-
你想从更高的层次上完成什么?例如,为什么在文本不可见的情况下将文本添加到文本框中是不可接受的?让我们帮助您尝试解决真正的问题,这可能涉及与您在问题中概述的方法不同的方法。
-
本身并没有什么问题。但是,如果将文本一行一行地添加到文本框并在其间有一定的延迟,那么用户实际上会看到文本框从一开始就被填满,这将是一件好事。现在,在表单仍在加载时写入文本框的行只会在完成后立即出现。注册 'visibleChanged' 事件显然并不能解决问题。我更多的是寻找一个事件,上面写着“我现在已经完成加载和处理所有 UI 事件,你现在可以去添加/使用表单上的任何控件”。