Откройте форму с помощью Form.Show: первый щелчок мыши игнорируется. Winforms, .Net - PullRequest
1 голос
/ 12 ноября 2009

Используя код ниже:

Private Sub ShowDropDown()
    Using f As New DropDownForm
        f.Visible = True
        Do While f.Visible
            Application.DoEvents()
            // Call to not take up 100% resources
        Loop
    End Using
End Sub

Если метод ShowDropDown вызывается чем-либо, кроме нажатия кнопки, то первый щелчок мыши в DropDownForm игнорируется. Таким образом, если он вызывался после щелчка PictureBox или щелчка формы, он игнорируется.

Я могу решить проблему, выполнив следующие действия:

Private Sub ShowDropDown()
    Using f As New DropDownForm
        f.Visible = True
        Dim capture As IntPtr = GetCapture()
        If (capture <> IntPtr.Zero) Then
            SendMessage(New HandleRef(Nothing, capture), &H1F, IntPtr.Zero, IntPtr.Zero)
            ReleaseCapture()
        End If
        Do While f.Visible
            Application.DoEvents()
        Loop
    End Using
End Sub

Это было предположение, после просмотра метода Form.ShowDialog в отражателе.

У меня вопрос: есть ли управляемый вызов, который я могу сделать для достижения того же результата, и что делает нажатие кнопки, а другие - нет?

ETA: проблема не возникает, если я открываю форму с помощью ключа.

1 Ответ

2 голосов
/ 12 ноября 2009

Да, захват мыши - ваша проблема. Вы можете исправить это, явно установив для свойства Control.Capture значение false. Например:

    private void pictureBox1_Click(object sender, EventArgs e) {
        pictureBox1.Capture = false;
        ShowDropDown();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...