C # FlowLayoutPanel MouseMove событие не обнаружено на полосе прокрутки - PullRequest
1 голос
/ 02 марта 2011

У меня есть FlowLayoutPanel с AutoScroll = true Мне нужно обнаружить движение мыши на полосе прокрутки, когда полоса прокрутки видна.

Событие MouseMove FlowLayoutPanel не захватывает события, относящиеся к полосе прокрутки.

Есть ли способ зацепить движение полосы прокрутки мышью?

Ответы [ 2 ]

1 голос
/ 03 марта 2011
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 голосов
/ 02 марта 2011

Я попробовал это (в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...