【问题标题】:Call parent control click event c#调用父控件点击事件c#
【发布时间】:2011-12-13 05:13:18
【问题描述】:

我开发了一个win-form应用程序,它有一个带有一个标签和一个文本框的自定义控件,并将自定义控件放在一个面板中,并以docksytle作为填充,

面板和自定义控件都有鼠标单击事件,但是当我单击自定义控件时,鼠标单击事件不会触发面板单击事件,

所以请告诉我如何调用面板鼠标点击事件。

【问题讨论】:

  • 我不确定您是否可以调用点击事件,但您可以让点击事件调用方法。如果此方法是公共的,则子控件可以调用此方法。
  • 为什么不将panel_click事件的代码添加到自定义控件事件中或者事件中最好调用paint_event(null,null)参数。
  • 感谢解决,找到自定义控件的父控件,使用InvokeOnClick方法调用父点击事件。
  • 再次卡住调用 mouseclick 事件。
  • 在您的点击事件处理程序中调用 OnClick() 方法。面板现在可以订阅 Click 事件。

标签: c# winforms


【解决方案1】:

您确定您真的需要调用父控件的点击吗?一般来说,在我看来,如果你会做这样的事情,那将是一种代码味道——尤其是当它需要一些奇怪的结构时。

如果您需要在单击面板和面板内的任何子控件时以相同的方式做出反应,只需从两个事件处理程序(即从父面板的事件处理程序和事件)调用相同的方法就足够了子控件的处理程序。例如,如果您需要鼠标指针在父面板内的位置,您可以使用例如 PointToScreen() 和 PointToClient() 方法轻松计算鼠标指针的位置。

【讨论】:

    【解决方案2】:

    这不是一个通用的解决方案,但也许它就是您正在寻找的:

    private void CustomControl_MouseClick(object sender, MouseEventArgs e)
    {
        panel_MouseClick(sender, e);
    }
    
    private void panel_MouseClick(object sender, MouseEventArgs e)
    {
    
    }
    

    【讨论】:

      【解决方案3】:

      为面板中的每个控件创建点击事件并调用父控件:

      private void This_Click(object sender, EventArgs e)
      {
          this.InvokeOnClick(this, null);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-13
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        相关资源
        最近更新 更多