MessageBox.Show ()를 사용하고 그 사이에 작동하지 않으면 어떻게 작동하지 않습니까?

StackOverflow https://stackoverflow.com/questions/909465

  •  05-09-2019
  •  | 
  •  

문제

.NET의 웹 브라우저를 다른 버튼이있는 양식에 포함 시켰습니다.

내가 개발중인 응용 프로그램은 키보드를 사용하지 않지만 터치 스크린을 사용합니다. 따라서 실제로 마우스 만 사용합니다. 웹 브라우저를 아래로 스크롤하기 위해 두 개의 사용자 정의 버튼을 만들었습니다. 해당 버튼을 클릭하면 브라우저로 "Pagedown"키 스트로크를 보내야하며 브라우저가 아래로 스크롤해야합니다.

따라서 클릭 이벤트의 코드는 다음과 같습니다.

        theForm.Activate();
        Application.DoEvents();
        theBrowser.Focus();
        Application.DoEvents();
        SendKeys.Send(key);

여기서 'Theform'은 양식이고 'TheBrowser'는 브라우저 인스턴스입니다.

버튼을 클릭하면 아무 일도 일어나지 않습니다. 먼저 브라우저를 클릭 한 다음 버튼을 클릭하면 작동합니다. 하지만 초점을 맞추고 있습니까? 그리고 나는 초점을 설정할 수있는 충분한 공간을 응용 프로그램에 주었습니까?

그러나 지금 내가 생각하는 것은 이상합니다. messagebox.show ( "hello")를 넣을 때; 코드에서 : 다음과 같이

    theForm.Activate();
    Application.DoEvents();
    theBrowser.Focus();
    MessageBox.Show("HELLO");
    Application.DoEvents();
    SendKeys.Send(key);

... 버튼을 클릭하면 즉시 작동합니다.

 

따라서 질문은 다음과 같습니다. MessageBox.Show ()를 꺼내면이 코드가 작동하지 않지만 MessageBox.show ()를 사용할 때는?

미리 감사드립니다 ...

도움이 되었습니까?

해결책

나에게 이것은 이것에 대한 잘못된 방법처럼 보인다.

이것의 선을 따라 무언가를 시도하십시오 C ++ 샘플 아니면 이거 C# 샘플.

키 프레스를 시뮬레이션하려는 경우 메시지를 보내는 HWND에 대해 적어도 명시 적입니다.

다른 팁

당신의 접근 방식이 올바른지에 들어 가지 않고. (그리고 나는 그것이 아니라고 생각합니다).

나는 당신이 레이스 상태가 있다고 도박 할 것입니다. 이는 브라우저 컨트롤이 이벤트를 제공하는 것보다 이벤트에로드하고 응답하는 데 더 많은 시간이 필요하다는 것을 의미합니다.

따라서 메시지를 할 때 갑자기 이벤트를 보내는 스레드가 차단되고 브라우저가 완전한 세밀한 또는 다른 것을 제어하게합니다.

터치를 다루는 더 나은 접근 방식이 있기 때문에 모바일에서 실행 중인지 아니면 일반 데스크탑에서 실행 중인지 여부를 알기가 어렵습니다. 멀티 터치 또는 WPF 4.0의 Window7 API (Surface Touch SDK Aswell에서 공유)를 참조하십시오.

도움이되기를 바랍니다. 아리엘

브라우저 컨트롤이 여전히 문서를로드하고 있으며 메시지 상자는 완료 할 시간이 충분할 수 있습니다. 그렇다면 브라우저의 ISBUSY 속성이 False가 될 때까지 기다리거나 DocumentCompleted 이벤트를 사용하십시오.

나는 알지 못하지만 일반적으로 내 경험상 프로그래밍 방식으로 초점을 바꾸려고 시도하는 것은 나쁜 생각입니다. 항상 버그 사냥을 끝내게됩니다. 그래도 Windows를 스크롤 할 수있는 방법에는 여러 가지가 있습니다. 어쩌면 다른 것을 시도해야합니까? 예를 들어 웹 브라우저의 JavaScript는 창을 효과적으로 스크롤 할 수 있습니다.

나는 당신이 여기서 먼저 행해지는 일이 있다고 생각합니다. 컨트롤에 초점을 맞추는 것은 순간적이지 않을 수 있고 당신이 보내는 키 스트로크는 다른 곳으로 갔지만 메시지 상자를 닫은 후 브라우저 컨트롤이 이미 집중되어 키 스트로크를 가져옵니다.

또한 MSDN의 메모를 인용합니다 control.focus ():

초점은 주로 사용자 정의 제어 저자를위한 저수준 방법입니다. 대신 응용 프로그램 프로그래머는 다음을 사용해야합니다 고르다 방법 또는 ActiveControl 아동 통제를위한 재산 또는 활성화 양식 방법.

따라서 그 중 하나를 사용하는 것이 Focus ()를 사용하는 것보다 낫습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top