2010-03-26 5 views
6

WinForms 응용 프로그램을 개발하는 동안 OpenFileDialog 및 SaveFileDialog 컨트롤의 버그라고 생각했습니다. Google 검색에서 같은 문제를 발견 한 다른 사람이 나타 났지만 해결 방법이나 해결 방법이 제공되지 않았습니다. 이 스레드는 http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-event에서 볼 수 있습니다.FileDialog DoubleClick 동작

MouseDown 이벤트를 처리하는 양식에 사용자 지정 컨트롤이 있습니다. 마우스가이 컨트롤 위에있을 때 FileDialog 컨트롤에서 파일을 두 번 클릭하면 (그 사이에 대화 상자가 있음) MouseDown 이벤트가 트리거됩니다. 이전에 언급 한 사람이 PictureBox 컨트롤을 사용하여 이러한 현상이 발생했기 때문에 이것이 내 컨트롤에 문제가 있다고 생각하지 않습니다. 대화 상자를 닫을 때 마우스 단추를 누른 채 두 번 클릭하여 파일을 열었을 때도 대화 상자에서 양식과 양식으로 이벤트가 전달되는 것 같습니다.

대화 상자가 활성화되어있는 동안 내 컨트롤을 사용하지 못하도록 시도했지만 이벤트를 캡처하지 못했습니다. 대화 상자를 닫은 후에 이벤트가 전달되어 내 제어가 다시 활성화되기 때문에 이것이라고 가정합니다. 누구든지 클릭이 양식에 도달하는 것을 막는 방법을 알고 있으며, 차례대로 내 제어를 알고 있습니까? 또한, FileDialog 컨트롤의 버그인지 또는 일부 설정을 잘못 구성했는지 확인할 수 있습니까?

답변

1

내 문제가 발생하는 이유를 알았을 때 MouseDown 및 MouseMove 이벤트를 실험하고있었습니다. FileDialog 상자가 사라지면 MouseMove 이벤트가 트리거되었습니다. 동일한 코드 블럭을 두 번 쓰지 않으려 고 시도한 (어리석은) 시도에서 MouseMove 핸들러 내에서 내 MouseDown 핸들러를 호출하여 특정 조건 (마우스 버튼을 누르지 않아도 됨)으로 인해 MouseDown 핸들러가 효과적으로 수행 할 수 있다고 생각했습니다. 아무것도. MouseDown (MouseClick이 아님)에서 FileDialog 상자가 사라 지므로 문제는 마우스 버튼을 누르고있는 것이 었습니다. 이로 인해 MouseDown 처리기가 예상치 못한 상황에서 조건부 코드를 실행하게되었습니다.

배우기 : 이벤트 처리기를 연결할 때 조심스럽게 조심하십시오. 또는 더 나은 방법으로 일반적인 기능을 끌어와 체인 이벤트 처리기를 체인. :-)

Jelly Amma에게 실제 사건을 더 가깝게 바라 보는 생각을 해주셔서 감사합니다.

3

이전에는이 ​​문제에 대해 들어 봤지만 이벤트 큐를 올바르게 처리해야한다는 것을 알고 있습니다. 코드를 보지 않고도 사용자 컨트롤 구현이 정확하지만 매우 자주 확인하는 것은 매우 어렵습니다. 기본 이벤트도 발생시키지 않고 마우스 이벤트를 재정의하면 이러한 종류의 동작이 발생할 수 있습니다.

+0

오버라이드 된 OnMouseDown (MouseEventArgs e) 핸들러 내에서 base.OnMouseDown (e)을 호출합니다. 나는 내 핸드러 (맨 위)와 후 (맨 아래) 둘 다 내 핸들러라고 부르려고했으나 두 위치 모두 문제에 영향을 미치지 않는 것으로 보인다. 이벤트 큐를 자세히 살펴보고 거기에서 찾을 수 있는지 확인해야합니다. –

관련 문제