2016-06-10 51 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