.Bind(...)
附加的 wx event handlers作为参数接收具有.Skip()
方法的事件对象。调用.Skip()
可以使事件的默认行为发生;附加不调用.Skip()
的处理程序会抑制默认行为。例如,没有调用EVT_CHAR
的{{1}}处理程序会抑制将字符输入字段的默认行为,从而阻止用户输入。
.Skip()
怎么样?它有任何默认行为吗?它不会似乎 - 无论我是否呼叫EVT_TEXT
,在EVT_TEXT
处理程序出现的字段中输入行为都相同或不。但是,是否有一些边缘情况或非显而易见的影响受到我是否呼叫.Skip()
的影响,因此应该决定是否要调用它?
答案 0 :(得分:1)
不调用wxEvent::Skip()
会做两个相关但不同的事情:它会阻止底层UI工具箱中的默认事件处理程序处理它,它还会阻止您自己代码中同一事件的任何其他处理程序处理它
第一个方面对命令事件确实不重要,命令事件通常在工具包级别没有任何默认事件处理程序。但是,第二个仍然是,特别是因为默认情况下命令事件会向上冒泡窗口层次结构。
因此,如果您将一些处理程序绑定到文本控件并且恰好在帧级别捕获所有wxEVT_TEXT
处理程序,则可以轻松地看到调用Skip()
之间的区别:框架处理程序只会在你调用它时获取事件。
从实际的角度来看,您通常不想跳过命令事件处理程序,因为它们应该只处理一次。但它不是绝对的阻截,有些情况下你仍然可以这样做,例如如果你的事件处理程序没有对这个特定事件做任何事情。
答案 1 :(得分:0)
一般来说,在事件处理程序中调用Skip()只对非wxCommandEvent处理程序有意义。您可以让处理程序完成,程序将执行下一个事件迭代。
由于wxEVT_TEXT是wxCommandEvent事件,因此调用Skip()没有多大意义。
然而,不在非wxCommandEvent上调用Skip()是不好的,如果你省略这样的调用,你真的应该知道你在做什么。