gpt4 book ai didi

.net - 如何从 WinForms 应用程序中用户控件上的子控件中获取事件?

转载 作者:行者123 更新时间:2023-12-04 01:46:11 25 4
gpt4 key购买 nike

主窗体有什么方法能够拦截在用户控件上的子控件上触发的事件?

我在我的应用程序的主窗体中嵌入了一个自定义用户控件。该控件包含各种操作数据的子控件,这些数据本身由主窗体上的其他控件显示。我想要的是,如果用户更改子控件时可以以某种方式通知主窗体,那么我可以在其他地方更新数据和相应的显示。

现在,我在作弊。我有一个委托(delegate)连接到子控件的焦点离开事件。这个委托(delegate)改变了我没有在其他地方使用的用户控件的一个属性(在这个原因中,CausesValidation)。然后,我在主窗体上定义了一个委托(delegate),用于当用户控件的 CausesValidation 属性发生更改时,它会指示应用程序更新数据并显示。

出现问题是因为我还为焦点离开用户控件时设置了一个委托(delegate),因为我需要先验证用户控件中的字段,然后才能允许用户执行其他任何操作。但是,如果用户只是在子控件之间切换,我不想验证,因为它们可能没有完成编辑。

基本上,我希望在用户切换子控件或离开用户控件时更新数据,但不进行验证。当用户离开控件时,我想更新并验证。现在,离开用户控件会导致验证触发两次。

最佳答案

最佳做法是在 UserControl 上公开事件。将事件冒泡到父表单。我已经开始为你整理了一个例子。以下是此示例提供的内容的描述。

  • UserControl1
  • 创建 UserControlTextBox1
  • UserControl 上注册公共(public)事件调用ControlChanged
  • UserControlTextBox1 注册一个事件处理程序文本更改事件
  • TextChangeEvent处理函数我称之为 ControlChanged事件冒泡到父表单
  • Form1
  • 删除 UserControl1 的实例关于设计师
  • UserControl1 上注册事件处理程序对于 MouseLeave对于 ControlChanged

  • 这是一个屏幕截图,说明 ControlChanged我在 UserControl 上定义的事件可通过父 Windows 窗体上的 Visual Studio 中的 UX 获得。
    Event Handlers for User Control

    关于.net - 如何从 WinForms 应用程序中用户控件上的子控件中获取事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/163104/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com