c# - Form.Move 和 Form.LocationChanged 有什么区别?

标签 c# winforms events

如果您创建一个标准的 C# WinForms 应用程序,您会发现一个表单有两个事件:MoveLocationChanged

Move 在表单移动时引发,LocationChanged 在表单 location 属性更改时引发。

当然,如果表单移动,location 属性也会改变吗?

这两个事件有什么区别?在什么情况下一个会开火而另一个不会?

最佳答案

MoveLocationChanged 事件在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/

相关文章:

javascript - 动态创建的元素上的事件绑定(bind)?

c++ - 在托管 C++ GUI 中通过另一个事件结束/中断/切换一个事件

c# - 执行异步 Web 请求时出现问题

c# 使用泛型函数将参数传递给具有许多重载的函数

c# - 是否有类似于 hawkeye 的 UI 检查器工具可与 .net 4.5 一起使用?

C# 如何在 winforms 应用程序中隐藏光标?

javascript - 我如何找到 radio 的输入元素并检查它?总是 "Unable to find element "

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet性能

c# - 使用表格

java - 监听器需要多长时间才能捕获触发的事件?