2011-03-02 78 views
1

我有一個FlowLayoutPanel和AutoScroll = true 當滾動條可見時,我需要檢測滾動條上鼠標的移動。C#FlowLayoutPanel滾動條上沒有檢測到MouseMove事件

FlowLayoutPanel的MouseMove事件不捕獲有關滾動條的事件。

有沒有辦法鉤住滾動條的鼠標移動?

+0

你能解釋一下爲什麼你需要在鼠標移過滾動條的反應? – 2011-03-02 12:07:23

+0

以及他正在試圖做什麼..我只是意識到,滾動條既不在窗體區域也不在FormLayoutPanel的區域..或鼠標移動事件時沒有提出,當它..嗯。讓我看看我們能做些什麼 – 2011-03-02 12:12:36

回答

1
class MyFlowLayoutPanel : FlowLayoutPanel 
{ 
    const int WM_NCMOUSEMOVE = 0x00A0; 

    protected override void WndProc(ref Message m) 
    { 
     if(m.Msg == WM_NCMOUSEMOVE) 
     { 
      Console.WriteLine("MouseOverScrollbar"); 
     } 

     base.WndProc(ref m); 
    } 
} 
0

我試過這個(在LINQPAD中),看起來像鼠標在滾動條上時MouseMoveEvent沒有引發。

void Main() 
{ 
    Application.Run(new Form2()); 
} 

public class Form2:Form 
{ 
public Form2() 
    { 
     Label lbl= new Label(); 
     lbl.Location = new Point(200,40); 
     this.Controls.Add(lbl); 
     FlowLayoutPanel fl = new FlowLayoutPanel();fl.AutoScroll =true; 
     fl.MouseMove += (s,e) => { lbl.Text = e.Location.Y.ToString();}; 
     this.MouseMove += (s,e) => { lbl.Text = e.Location.Y.ToString();}; 
     for(int i=0;i<10;i++){fl.Controls.Add(new Button());} 
     this.Controls.Add(fl); 

    } 
} 

enter image description here

這些是ScrollBar.MouseMove事件,但其不能供我們直接使用。

等待,而我看看是否有任何wokaround