C# SetBounds和SetBoundsCore之间有什么区别
在WinForms中,您可以使用C# SetBounds和SetBoundsCore之间有什么区别,c#,winforms,C#,Winforms,在WinForms中,您可以使用SetBounds设置控件的边界,或者如果您创建了用户控件,则可以覆盖SetBoundsCore。我想知道,它们是做相同的事还是有什么不同?我假设用户调用SetBounds,然后转发到SetBoundsCore来实现实际行为SetBoundsCore不应由您的代码调用。首先,SetBounds不是虚拟的,因此如果您需要在设置边界时运行一些额外的代码,您唯一的选择就是覆盖SetBoundsCore SetBounds执行一些参数验证,并包含有关调用SetBounds
SetBounds
设置控件的边界,或者如果您创建了用户控件,则可以覆盖SetBoundsCore
。我想知道,它们是做相同的事还是有什么不同?我假设用户调用SetBounds
,然后转发到SetBoundsCore
来实现实际行为SetBoundsCore
不应由您的代码调用。首先,SetBounds
不是虚拟的,因此如果您需要在设置边界时运行一些额外的代码,您唯一的选择就是覆盖SetBoundsCore
SetBounds
执行一些参数验证,并包含有关调用SetBoundsCore
的逻辑,该逻辑的大小基于指定的边界
参数。它还确保不调用SetBoundsCore
,除非大小实际发生变化
换句话说,SetBoundsCore
是实现的核心,而SetBounds
是包含验证和一些其他内务逻辑的公共入口点。是一种更改控件位置和大小的public
方法。它在引擎盖下调用受保护的虚拟方法
这意味着,如果覆盖SetBoundsCore()
,则可以更改其算法(例如,添加位置和大小限制),并且这些更改将适用于除您自己调用SetBounds()
以外的某些代码