有没有办法让主窗体能够拦截在用户控件上的子控件上触发的事件?
我在我的应用程序的主窗体中嵌入了自定义用户控件.该控件包含操作数据的各种子控件,这些子控件本身由主窗体上的其他控件显示.我想要的是,如果主要表单可以在用户更改子控件时以某种方式通知,那么我可以在其他地方更新数据和相应的显示.
现在,我在作弊.我有一个代表连接到子控件的焦点离开事件.此委托更改了我未在其他地方使用的用户控件的属性(在此原因中,CausesValidation).然后,我在主窗体上定义了一个委托,用于何时更改用户控件的CausesValidation属性,然后指示应用程序更新数据并显示.
出现问题是因为我还有一个委托设置焦点何时离开用户控件,因为我需要验证用户控件中的字段,然后才允许用户执行任何其他操作.但是,如果用户只是在子控件之间切换,我不想验证,因为它们可能没有完成编辑.
基本上,我希望在用户切换子控件或离开用户控件但不验证时更新数据.当用户离开控件时,我想更新并验证.现在,离开用户控件会导致验证两次.
最佳做法是将事件暴露UserControl
在父泡沫表格的事件上.我已经为你做了一个例子.以下是此示例提供的内容的说明.
UserControl1
创建一个UserControl
与TextBox1
在UserControl
被叫方注册公共事件ControlChanged
在UserControl
寄存器中,TextBox1
TextChangedEvent 的事件处理程序
在TextChangeEvent
处理程序函数中,我将ControlChanged
事件调用为冒泡到父表单
Form1
删除UserControl1
设计器上的实例
在UserControl1
for MouseLeave
和for 上注册一个事件处理程序ControlChanged
这是一个屏幕截图,说明ControlChanged
我在其上定义的事件UserControl
可通过父Windows窗体上的Visual Studio中的UX获得.
用户控制的事件处理程序http://friendfeed.s3.amazonaws.com/0d5a3968cb785625c8afb3974a8d84894c476291