z 顺序更改时的 Winform 控件事件
Posted
技术标签:
【中文标题】z 顺序更改时的 Winform 控件事件【英文标题】:Winform controls event when z order changed 【发布时间】:2020-10-07 16:27:44 【问题描述】:我在同一个地方有控件(一个在另一个之上)
有没有办法在 z-order 更改时获取事件?
目的是为了调试,看看什么时候,谁改变了顺序
可以通过BringToFront
或SendToBack
或SetChildIndex
更改
喜欢Control.ZOrderChanged
或form.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 控件事件的主要内容,如果未能解决你的问题,请参考以下文章