2010-08-13 5 views
5

개체/속성 이름 생성과 관련하여 WebBrowser 후기 바인딩 호출을 사용하는 데 문제가 있습니다. 예를 들어WebBrowser 늦은 바인드 개체/속성 이름의 문제

:

WebBrowser1.Document.DomDocument.Forms.Myform.mycontrol.Value = "test" 

WebBrowser 컨트롤의 하나 개 이상의 인스턴스에 실패합니다

무엇 실제로 일어나는 것은 mycontrol 객체 Mycontrol되고 컴파일 vb.net 응용 프로그램이 실패 할 것입니다 오류가있는

회원을 찾을 수 없습니다. (HRESULT에서 예외 : 0x80020003 (DISP_E_MEMBERNOTFOUND)) Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet에서 마이크로 소프트 (개체 O, 유형 OBJTYPE, 문자열 이름, [] args를 문자열 []는 paramNames, 부울 [] 카피 백 개체) .VisualBasic.CompilerServices.NewLateBinding.LateGet (C : \ Projects의 Execute()에서 Type 유형, 문자열 MemberName, Object [] 인수, 문자열 [] ArgumentNames, 유형 [] TypeArguments, Boolean [] 카피 백) \ WebBrowser \ SampleCall.vb : line 16

이 문제에 대한 해결책이 있습니까? 여러 웹 브라우저와 VB6 응용 프로그램과 함께 작동합니다

같은 코드는

편집을 제어 :이 코드는 함께 comipled되어 엄격한 옵션 오프

답변

0

값을 다른 방법으로 설정해보십시오 :
WebBrowser1.Document.Forms("Myform").children("mycontrol").Value = "test"

2

를 @ bugtussle

다음 과제물 :

WebBrowser1.Document.Forms("Myform").Children("mycontrol").InnerText = "test" 
WebBrowser1.Document.DomDocument.Forms("Myform").all("mycontrol").Value = "test" 
WebBrowser1.Document.DomDocument.Forms.Myform.all.mycontrol.Value = "test" 

당신이 반사 유틸리티를 사용하여 Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet 방법에 대해 살펴 경우 변경 및 코드

많이 다시 테스트하는 데 필요한이 방법의 문제, 당신은 BindingFlags의 것을 찾을 수 있습니다. IgnoreCase 플래그는 binder.InvokeMember 호출에서 사용됩니다.

이 호출이 COM을 통해 수행되며 COM interop이 조회 테이블에서 한 버전의 이름을 사용하고 있다고 읽지 못했습니다. 매개 변수 이름이 "mycontrol"이 아닌이 버전보다 "MyControl"으로 해당 테이블에 처음 입력 된 것과 같습니다. 내 생각에 InvokeMember가 올바른 멤버를 찾지 못하고 있기 때문입니다.

관련 문제