问题描述
请教高手:我的应用程序中窗体上放置了上千个textbox,label,当textbox或label赋值时程序运行较慢,大部分原因可能是频繁触发窗体刷新事件。窗体的以下三个属性设置如下:(1)CauseInvalidation=True(2)DoubleBuffered=True(3)AutoValidate=EnablePreventFocusChange(另有三个备选项:Inherit,Disable,EnableAllowFocusChange)不知道这三个属性的作用是什么?可否给与指导?如果更改这三个属性的设置,有望避免窗体频繁刷新,提高赋值速度吗?
解决方案
解决方案二:
问题1使用验证组可以将页面上的验证控件归为一组。可以对每个验证组执行验证,该验证与同一页的其他验证组无关。将要分组的所有控件的ValidationGroup属性设置为同一个名称(字符串)即可创建验证组。可以为验证组分配任何名称,但必须对该组的所有成员使用相同的名称。在回发过程中,只根据当前验证组中的验证控件来设置Page类的IsValid属性。当前验证组是由导致验证发生的控件确定的。例如,如果单击验证组为LoginForm的按钮控件,并且其ValidationGroup属性设置为LoginForm的所有验证控件都有效,则IsValid属性将返回true。对于其他控件(如DropDownList控件),如果控件的CausesValidation属性设置为true(而AutoPostBack属性设置为true),则也可以触发验证。若要以编程方式进行验证,可以调用Validate方法重载,使其采用validationGroup参数来强制只为该验证组进行验证。请注意,在调用Validate方法时,IsValid属性反映到目前为止已验证的所有组的有效性。这可能包括作为回发结果验证的组以及以编程方式验证的组。如果任一组中的任何控件无效,则IsValid属性返回false。下面的代码示例演示在Button控件回发到服务器时,如何使用ValidationGroup属性指定要验证的控件。页面包含三个文本框(用于从用户捕获数据)和三个RequiredFieldValidator控件(用于确保用户没有保留文本框为空白)。前两个文本框的RequiredFieldValidator控件位于PersonalInfoGroup验证组中,而第三个文本框的RequiredFieldValidator控件位于LocationInfoGroup验证组中。在单击Button1时,只验证PersonalInfoGroup验证组中的控件。在单击Button2时,只验证LocationInfoGroup验证组中的控件。问题2双缓冲窗体和控件使用双缓冲可以减少图形闪烁问题3获取或设置一个值,该值指示当焦点更改时是否自动验证此容器内的控件。