我有一个包含一个文本框的动态加载到窗体的用户控件。 在表单启动时,我启动了usercontrol,并将其可见性标记设置为'false'。 我想在用户控件变得可见时自动触发一个方法,因为此方法将一些输出写入文本框,此方法应该只在usercontrol及其所有继承的控件对用户可见后才开始执行。
我认为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();
}
你想从更高的水平完成什么?例如,为什么在文本框不可见时向文本框添加文本是不可接受的?让我们帮助您尝试解决实际问题,这可能涉及与您在问题中概述的方法不同的方法。 – Eric 2009-07-29 12:01:18
sich没有真正的问题。但是,如果在文本框行之后添加文本,并且在用户实际看到文本框从一开始就被填满之间存在一定的延迟,那将会很不错。现在,在窗体仍在加载时写入文本框的行只是在完成后立即出现。显然,在'visibleChanged'事件上注册并不能做到这一点。我更期待的是说,一个事件“我做现在载入和处理所有UI事件,你现在可以走了,并添加表格/使用任何控制”。 – Mez 2009-07-29 18:42:03