Чтобы ограничить щелчок мышью - PullRequest
1 голос
/ 02 марта 2010

Я хочу ограничить щелчок мышью в пределах области, и если в пределах области есть какой-либо элемент управления, он должен разрешать щелчок мышью.

Как это сделать

Ответы [ 3 ]

1 голос
/ 02 марта 2010

Вы просто не отвечаете на событие щелчка мыши для региона и реализуете событие его дочерних элементов управления.

Или я вас не понимаю.

1 голос
/ 02 марта 2010

В вашей форме переопределите метод WndProc, обработайте левое сообщение мыши и, если оно находится в принятой области, вызовите базовый класс, иначе проглотите сообщение (т.е. не вызывайте базовый класс)

0 голосов
/ 02 марта 2010

Вам, вероятно, нужно захватывать мышь, помимо обработки сообщений мыши о нажатиях / подъемах.

К сожалению, лучший способ захватить мышь - это отслеживать сообщение WM_CAPTURECHANGED, означающее, что нам нужно перейти в Win32 API, чтобы отслеживать это событие, поскольку Windows Forms не определяют соответствующее событие. Например, чтобы обработать это сообщение Win32, сначала вы определяете внутренний класс для обработки низкоуровневого сообщения WM_CAPTURECHANGED и определяете обработчик события:

public partial class Form1 : Form
{
    class CaptureChangedWindow : NativeWindow
    {
        public CaptureChanged OnCaptureChanged;

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 533)     // WM_CAPTURECHANGED
                OnCaptureChanged();
            base.WndProc(ref m);
        }
    }
    public delegate void CaptureChanged();
    ...
}

Далее объявите поле члена для хранения экземпляра CaptureChangedWindow:

public partial class Form1 : Form
{
    CaptureChangedWindow ccw;
    ...
}

Далее определите метод, который будет вызываться при вызове делегата CaptureChanged:

public partial class Form1 : Form
{

    private void CaptureChangedEventHandler()
    {
        // your code
        // e.g. now it's safe to assume that mouse is captured
    }
    ...
}

Наконец, измените конструктор, чтобы создать и инициализировать вложенный класс:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        ccw = new CaptureChangedWindow();
        ccw.AssignHandle(Handle);
        ccw.OnCaptureChanged +=
                  new CaptureChanged(CaptureChangedEventHandler);
    }
    ...
}

Это все, что тебе нужно. Затем вы можете обрабатывать другие события мыши как обычно.

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