아래의 코드를 사용하여 :Form.Show로 양식 열기 : 첫 번째 마우스 클릭은 무시됩니다. 윈폼, 닷넷
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 : 키를 사용하여 양식을 열면 문제가 발생하지 않습니다.
- 당신이 사용할 수있는 Thread.sleep를 (0) Application.DoEvents에 대한 대안()가 100 %의 CPU를 정지로 ... Application.DoEvents를() 당신이 당신에게 부작용을 줄 수도 하지. –
어떤 것이 더 좋을지 모르지만 Application.DoEvents()를 사용하고 MsgWaitForMultipleObjectsEx (0, IntPtr.Zero, 250, & HFF, 4)를 사용합니다. 이것이 PropertyGrid가 처리하는 방법입니다. – Jules