z 顺序更改时的 Winform 控件事件

Posted

技术标签:

【中文标题】z 顺序更改时的 Winform 控件事件【英文标题】:Winform controls event when z order changed 【发布时间】:2020-10-07 16:27:44 【问题描述】:

我在同一个地方有控件(一个在另一个之上)

有没有办法在 z-order 更改时获取事件?

目的是为了调试,看看什么时候,谁改变了顺序

可以通过BringToFrontSendToBackSetChildIndex更改

喜欢Control.ZOrderChangedform.Controls.ZOrderChanged

【问题讨论】:

没有这样的事件,请阅读:***.com/questions/14064067/… 但是为什么需要这样的事件,如果你在调用 BringToFront()/SendToBack()/SetChildIndex() 之前可以编写逻辑或者在调用这些方法之后,我看不到使用事件的任何意义。换句话说,是什么触发了 Z 顺序的变化? 当Control收到WM_NCPAINT消息时,可以查看int childIndex = [Control].Parent.Controls.GetChildIndex([Control])。不过,调用这些方法的是您的代码。你能描述一下这是干什么用的吗? 是用来调试看谁改变z-order 也许在 z 顺序发生变化的地方执行 debug.WriteLine 【参考方案1】:

更改ChildIndex 将在子控件的父控件上触发Layout Event。当然这假设SuspendLayout没有在父控件上被调用。

您可以通过检查LayoutEventArgs.AffectedProperty Property(一个字符串)来过滤事件,看看它是否等于“ChildIndex”。要确定哪个控件触发了事件,请检查LayoutEventArgs.AffectedControl Property

【讨论】:

以上是关于z 顺序更改时的 Winform 控件事件的主要内容,如果未能解决你的问题,请参考以下文章

WebBrowser引用IE版本问题,更改使用高版本IE

C#WinForm如何给控件的Click事件传送参数?

c# winform 控件层次问题

Winform DataGridView控件添加行号

Winform DataGridView控件添加行号

winform窗体控件设计时的位置到运行后怎么发生了变化