2009-03-15 7 views
0

Windows 탐색기를 Windows Form에 포함시킨 다음 웹에서 임의의 페이지로 이동한다고 가정 해 보겠습니다. 어떻게하면 텍스트 상자 (또는 그 문제에 대해 텍스트 입력을 받아 들일 수있는 다른 컨트롤)가 포커스가있는 항목이 될지를 결정할 수 있습니까? 기본적으로 마우스를 클릭 할 때마다 포커스가있는 항목이 텍스트 입력인지 또는 텍스트 입력을위한 다른 컨트롤인지 확인하고 적절하게 작동하는지 확인할 수 있습니다. 사전에Windows 폼의 텍스트 상자에 포커스가 있는지 확인하는 방법

감사합니다,

+0

에서는 WebBrowser와의 연결은 무엇

  • 핸들 DISPID_HTMLELEMENTEVENTS2_ONFOCUS? HTML 요소 또는 WinForm 컨트롤을 찾으시겠습니까? –

  • +0

    WinForm 컨트롤. – Beaker

    +0

    어떨까요? 답변을 확인한 다음 (다시 이전 질문 넣기) 새 질문을 열면 업데이트가되지 않으면 다른 답변이 의미가 있습니다. – TStamper

    답변

    1

    당신은 여전히 ​​웹 브라우저의 롤을 설명하지 않은하지만 문제는 입력 초점을 추적 것으로 보인다. Form 레벨 이벤트는 모르지만 이벤트 핸들러를 모든 관련 컨트롤의 Enter 또는 GotFocus 이벤트에 연결할 수 있습니다.

    // in Form_Load 
    foreach (var control in this.Controls) control.Enter += OnEnterControl; 
    
    
    private void OnEnterControl(object sender, EventArgs e) 
    { 
        focusControl = (sender as Control); 
    } 
    
    +0

    activex IE 브라우저 컨트롤에 대한 핸들을 얻고 있습니다. 이 핸들을 사용하여 프로그래밍 방식으로 특정 위치를 클릭하는 등의 브라우저 컨트롤에 입력을 보내려면 Windows 양식에 포함됩니다. 당신의 솔루션이 나를 위해 일할 수도 있습니다. 나는 그것을 시도한 다음 대답으로 확인하십시오. – Beaker

    +0

    이것은 winform 컨트롤에서만 작동합니다. 이것은 웹 브라우저 내부의 MSHTML 컨트롤에서 작동하지 않을 것입니다. 이것은 OP가 요구하는 것입니다. –

    +0

    @ jeffamaphone : OP 아래의 설명을보십시오. –

    0

    나는 싶은 것은 HTMLTextContainerEvents2있는 dispinterface 싱크와 (잠재적 및 onblur) onfocus 및 응답 믿습니다.

    여러분이 직접 pinvoke를 통해 interop을 수행해야합니다. 나는 당신이 (getElementsByTagName 또는 어떤 것을 사용하여) 추적하고자하는 모든 객체에 대한 IHTMLElement 포인터를 얻을 수 있다고 가정한다. 일단 그렇게하면

    1. IConnectionPointContainer에 대한 IHTMLElemnt를 쿼리하십시오. IConnectionPoint
    2. 전화 IConnectionPointContainer :: FindConnectionPoint (DIID_DHTMLTextContainerEvents2)
    3. 전화를 IConnectionPoint :: 조언는() 콜백 될 것
    4. 물론 당신의 IDispatch :: 호출을 (구현해야 2 단계)에서 얻어진 . 등
    +0

    그리고 끝나면 연결을 끊는 것을 잊지 마십시오. –

    +0

    지금까지 많은 기능을 구현하기 위해 SendInput과 SendMessage를 사용해 왔습니다. IE 컨트롤 핸들을 사용하는 대답을 선호합니다. 난 IE 컨트롤에서 Windows 컨트롤에서 작동하도록 찾고있어 그래서 어떤 특별한 IE 개체가 필요합니다 생각하지 않습니다. – Beaker

    +0

    글쎄, 그 IE 컨트롤에서 Windows 컨트롤이 아닙니다. MSHTML은 모든 자체 컨트롤을 렌더링합니다 (IE6에서는 콤보 상자 제외). 따라서 핸들이 없으므로 컨트롤에 핸들을 가져올 수 없습니다. spy ++를 사용하여 확인할 수 있습니다. –

    관련 문제