如果您创建一个标准的 C# WinForms 应用程序,您会发现一个表单有两个事件:Move
和 LocationChanged
。
Move
在表单移动时引发,LocationChanged
在表单 location
属性更改时引发。
当然,如果表单移动,location 属性也会改变吗?
这两个事件有什么区别?在什么情况下一个会开火而另一个不会?
最佳答案
Move
和LocationChanged
事件在Control
类上声明,然后由ScrollableControl
继承, ContainerControl
最后是 Form
。
根据source code , OnLocationChanged
调用 OnMove
before 它调用 LocationChanged
事件处理程序。因此,将首先引发 OnMove
事件,然后 LocationChanged
。理论上您可以处理这两个事件,因为您知道 Move
将首先发生。
如果您查看源代码,您会看到当边界发生变化(或类似事件)时会引发 LocationChanged
。您还会注意到 唯一 实际调用 OnMove
的实际上是 OnLocationChanged
。
根据 MSDN , LocationChanged
事件:
Occurs when the Location property value has changed.... This event is raised if the Location property is changed by either a programmatic modification or through interaction.
它使 no such distinction对于 OnMove
,它仅说明:
Occurs when the control is moved.
这很奇怪,因为这两个事件相互关联。
然而,这是一个特定类处理这些事件的方式。我对引用源做了一些搜索,除了我已经引用的实例之外,我找不到任何明确调用 OnMove
的内容(继承自 Control
)。这并不意味着它们不存在或不能在它们自己的 Control
子类中单独调用它。
关于c# - Form.Move 和 Form.LocationChanged 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343581/