2016-06-10 71 views
1

我有一个自定义的用户控件,其中包含占用80%空间的图表元素。c#通过子控件的鼠标事件

当这个被放置在一个形式,我可以点击不受图表和点击/鼠标按下/鼠标松开事件工作所占用的面积。但是,当我点击图表区域时,鼠标事件不会通过,因此不会触发。

是否有这样做,而不在其中添加事件功能在窗体上的每个控件具有全球性的方式?

void Drag_MouseDown(object sender, MouseEventArgs e) 
    { 
     activeControl = sender as UserControl; 
     previousLocation = e.Location; 
     Cursor = Cursors.SizeAll; 
    } 

    void Drag_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (activeControl == null || activeControl != sender) 
      return; 

     var location = activeControl.Location; 
     location.Offset(e.Location.X - previousLocation.X, e.Location.Y - previousLocation.Y); 
     activeControl.Location = location; 
    } 

    void Drag_MouseUp(object sender, MouseEventArgs e) 
    { 
     activeControl = null; 
     Cursor = Cursors.Default; 
    } 

这些是不得不手动设置到两个自定义用户控件和图表

+1

你可以在这里分享代码吗? – DDave

+0

我已经添加了上面的代码。我想知道是否在用户控件上的任何子控件上触发了其中一个鼠标事件而不是必须手动设置它们时,才会调用这些函数。 –

+0

你在哪里分配了这个事件? – DDave

回答

0

好像图表覆盖你的鼠标事件的时刻。因此,您可以尝试将事件侦听器添加到图表中。 PS:我们可以为不同的监听器分配相同的方法。

+0

之外这只能有一个全局函数来做到这一点,而无需听众添加到每个控制? –

+0

它通常只是倾听,但在这种情况下,图表似乎正在对这些事件做一些自己的事情。所以,我们更好地覆盖并执行我们的代码。 – DDave

+0

@AshleyCusack也提到这个http://stackoverflow.com/questions/1719636/how-to-capture-mousemove-events-beneath-child-controls – DDave