自定义控件,如何判断是否处于窗体初始化过程?

时间:2022-05-22 16:05:05
一个自定义控件包含多个属性,该控件需要在设计窗体时候添加到窗体中,并且它的属性需要在设计器中显示以便修改初始值,实际运行中修改这些属性值需要引发一些繁琐的操作。

问题:如何使此控件所在窗体初始化完成之前,不触发这些繁琐的操作?

目前我已经知道 this.DesignMode 可以判断是否处于IDE设计模式,那么如何判断是否处于其所在窗体的初始化过程呢?

9 个解决方案

#1


试试Load事件里设置一个局部变量的值来判断,完成初始化时会引发这个Load事件的。

#2


引用 1 楼 qldsrx 的回复:
试试Load事件里设置一个局部变量的值来判断,完成初始化时会引发这个Load事件的。


只能这样了吗,有没有其他方法呢?

#3


自定义控件,如何判断是否处于窗体初始化过程?
只能这样

#4


你创建的自定义的控件应该是继承UserControl, 那么在你进入设计界面 打开工具箱时,工具箱应该会出现自定义组件,把自定义的控件拖到设计界面修改属性就可以了, 这部分修改是在界面的构造界面的方法里实现的,此时事件不会触发,你最好把事件的注册写在这个控件属性设置的最后面。
还有一个方法就是如果是特殊的需要在加载界面重新赋值,而不想触发相应事件的,就全局加一个Isload变量,进Load加载改为true,完成加载后置为false,然后在事件最开始做这个参数判断就可以了

#5


问题:如何使此控件所在窗体初始化完成之前,不触发这些繁琐的操作?

窗体都还没有初始化 也就是说那个时候 也许你的控件 根本对于窗体来说不存在
而且 是什么样子的操作 非要让你关系到窗体初始化的前后?还是说 逻辑上处理本身就不合理?
你控件.Parent 可以得到你控件所在的上层容器 当 xx.Parent.Parent....Parent = null 时候 就说明前一个Parent是窗体了
得到窗体了 你自己再从窗体中获取一些信息吧

#6


该回复于2015-10-21 15:37:18被管理员删除

#7


感觉控件设计有问题了

控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件

让引用控件的窗体去实现事件,在事件中进行繁琐操作

这样就不用考录什么初始化的时候各种判断了

#8


引用 7 楼 porenasckx 的回复:
感觉控件设计有问题了
控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件
让引用控件的窗体去实现事件,在事件中进行繁琐操作
这样就不用考录什么初始化的时候各种判断了


对,我就是在属性变更的时候触发一个自定义事件的,在事件过程中处理一些复杂操作。。
我觉得还是需要考虑初始化判断的,在窗体初始化过程中,会修改自定义控件的属性值,同样会触发事件。

#9


引用 8 楼 hironpan 的回复:
Quote: 引用 7 楼 porenasckx 的回复:

感觉控件设计有问题了
控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件
让引用控件的窗体去实现事件,在事件中进行繁琐操作
这样就不用考录什么初始化的时候各种判断了


对,我就是在属性变更的时候触发一个自定义事件的,在事件过程中处理一些复杂操作。。
我觉得还是需要考虑初始化判断的,在窗体初始化过程中,会修改自定义控件的属性值,同样会触发事件。


在事件实现的时候,先判断IsLoaded属性

#1


试试Load事件里设置一个局部变量的值来判断,完成初始化时会引发这个Load事件的。

#2


引用 1 楼 qldsrx 的回复:
试试Load事件里设置一个局部变量的值来判断,完成初始化时会引发这个Load事件的。


只能这样了吗,有没有其他方法呢?

#3


自定义控件,如何判断是否处于窗体初始化过程?
只能这样

#4


你创建的自定义的控件应该是继承UserControl, 那么在你进入设计界面 打开工具箱时,工具箱应该会出现自定义组件,把自定义的控件拖到设计界面修改属性就可以了, 这部分修改是在界面的构造界面的方法里实现的,此时事件不会触发,你最好把事件的注册写在这个控件属性设置的最后面。
还有一个方法就是如果是特殊的需要在加载界面重新赋值,而不想触发相应事件的,就全局加一个Isload变量,进Load加载改为true,完成加载后置为false,然后在事件最开始做这个参数判断就可以了

#5


问题:如何使此控件所在窗体初始化完成之前,不触发这些繁琐的操作?

窗体都还没有初始化 也就是说那个时候 也许你的控件 根本对于窗体来说不存在
而且 是什么样子的操作 非要让你关系到窗体初始化的前后?还是说 逻辑上处理本身就不合理?
你控件.Parent 可以得到你控件所在的上层容器 当 xx.Parent.Parent....Parent = null 时候 就说明前一个Parent是窗体了
得到窗体了 你自己再从窗体中获取一些信息吧

#6


该回复于2015-10-21 15:37:18被管理员删除

#7


感觉控件设计有问题了

控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件

让引用控件的窗体去实现事件,在事件中进行繁琐操作

这样就不用考录什么初始化的时候各种判断了

#8


引用 7 楼 porenasckx 的回复:
感觉控件设计有问题了
控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件
让引用控件的窗体去实现事件,在事件中进行繁琐操作
这样就不用考录什么初始化的时候各种判断了


对,我就是在属性变更的时候触发一个自定义事件的,在事件过程中处理一些复杂操作。。
我觉得还是需要考虑初始化判断的,在窗体初始化过程中,会修改自定义控件的属性值,同样会触发事件。

#9


引用 8 楼 hironpan 的回复:
Quote: 引用 7 楼 porenasckx 的回复:

感觉控件设计有问题了
控件基本不会有任何繁琐操作的,繁琐的操作应该留出事件
让引用控件的窗体去实现事件,在事件中进行繁琐操作
这样就不用考录什么初始化的时候各种判断了


对,我就是在属性变更的时候触发一个自定义事件的,在事件过程中处理一些复杂操作。。
我觉得还是需要考虑初始化判断的,在窗体初始化过程中,会修改自定义控件的属性值,同样会触发事件。


在事件实现的时候,先判断IsLoaded属性