代码之家  ›  专栏  ›  技术社区  ›  HCL

从事件调用方法中调用另一个事件是否合法

  •  0
  • HCL  · 技术社区  · 14 年前

    以下代码是我为解决 probem 我已经贴了。它工作得很好,但是我很好奇它是否允许从 具有原始事件的EventArgs的调用方法:

    protected override void OnMouseLeftButtonUp( MouseButtonEventArgs e )   {   
        base.OnMouseLeftButtonDown( e );   
    }  
    

    我经常看到这个模式,但从来没有使用过,因为我一直担心这会在未来的WPF版本中导致副作用或问题。有人能告诉我是否保存了这种重定向的事件调用吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Isak Savo    14 年前

    我会非常小心的。如果事件数据包含只与原始事件相关的内容,则其他事件处理程序可能会被此数据混淆。尤其是当涉及到来自外部设备(如鼠标)的事件时。

    也许你发布的这个例子没问题,我不知道。但我可以肯定地看到,如果换一种方式,当鼠标向上移动时,鼠标向下移动会出现问题——鼠标向下处理程序可以(可能,我不知道是否这样做)查询输入设备,以了解该鼠标的实际状态,但它们不匹配。或者在鼠标上做一些只有在按下时才起作用的操作。

    总而言之:这可能有效,但我不会依赖它,除非你100%确信它在某些条件下不会破裂。

        2
  •  2
  •   Dan Bryant    14 年前

    如果有一个新的事件或方法,OnMouseLeftButtonDown和OnMouseLeftButtonUp都可以调用,并且有一个合适的名称来说明您的意图,那就更好了。正如现在的代码所显示的那样,控制基本上是在撒谎,只要你的客户从来没有对你的虚张声势吹毛求疵,并且相信你是诚实的,这才有效。使用更复杂的代码会导致非常令人沮丧的调试会话。更好的方法是对代码进行结构和命名,这样您就可以表达自己的意图,而不是撒谎以获得方便的副作用。

        3
  •  1
  •   CodingGorilla    14 年前

    我看不出你为什么不能这样做的任何原因,你只是在基类上调用一个方法。在某个地方有一个wndproc(),它接收实际的Windows消息并将其转换为您正在进行的相同调用。