2013-02-14 5 views
2

일부 오래된 VB6 코드를 리팩터링 할 때 나는 정말 이상한 행동을 발견했습니다. 컨트롤 배열 요소의 DragMode 속성을 설정하려고하면 배열에서이 컨트롤을 분리하면 컴파일러에서 '메서드 또는 데이터 멤버를 찾을 수 없습니다'라고 알려줍니다.VB6 : 일부 컨트롤 배열 요소 속성을 사용할 수 없습니다.

'myControl'이 텍스트 상자가있는 사용자 정의 컨트롤이 아닌 아래 예제에서 볼 수 있습니다. 그리고 '컨트롤'은 myControls가 포함 된 컨트롤 배열입니다. 첫 번째 루프는 작동하고 두 번째 루프는 작동하지 않습니다.

Dim i As Integer 
Dim ctrl As myControl 

For i = 0 To 2 
    myControls(i).DragMode = vbAutomatic 
Next i 

For Each ctrl In myControls 
    ctrl.DragMode = vbAutomatic 
Next 

는 업데이트 : 감사와

내가 각 루프 작업에 대한있어 @wqw합니다. 나를 위해 작동 코드는 지금과 같이 보입니다 :

Dim ctrlExt As VBControlExtender 
Dim ctrl As myControl 

For Each ctrlExt In myControls 

    Set ctrl = ctrlExt 

    ctrlExt.DragMode = vbAutomatic 
    ctrl.SpecificProperty = "Test" 
Next 
+0

사용자 컨트롤이있는 경우 설정 Ctrl 키 = ctrlExt'이 실패 할 수 있습니다'조심하십시오 별도의 ActiveX 컨트롤 (OCX) 프로젝트 및/또는 응용 프로그램을 컴파일 할 때. 이 경우에는'Set ctrl = ctrlExt.Object'를 사용해야합니다. – wqw

답변

2

이 작동 Dim ctrl As VBControlExtender

시도를

Dim i As Integer 
Dim ctrl As VBControlExtender 

For Each ctrl In Controls 
    ctrl.DragMode = vbAutomatic 
Next 

For i = MyControls.LBound To MyControls.UBound 
    MyControls(i).DragMode = vbAutomatic 
Next i 
+0

빠른 응답을 보내 주셔서 감사합니다. 내가 여기서 빠뜨려야 할 것이있다. 내게는 마치 두 개의 루프를 바꾼 것처럼 보인다. 예제의 두 번째 루프는 항상 작동하지만 (컨트롤 배열의 이름을 변경했기 때문에 이것을 제외하고) 이제 형식 불일치가 발생하므로 예제의 첫 번째 루프가 작동하지 않습니다. 컨트롤의 유형은 'myControl'입니다. – Vincent

+0

컨트롤이 폼의 컨트롤 컬렉션의 이름이라는 것을 알았 기 때문에 컨트롤 배열의 이름을 myControls로 변경하려고 시도했습니다. : -/그래서 내가 누락 된 것이 었습니다. 나는 같은 결과를 얻었습니다. – Vincent

+0

아니 .. 네 말이 맞았다! 그것은 효과가있다. 나는 너무 빨리 대답했다! 죄송 해요! – Vincent