2009-07-05 6 views
1

은 내가 할 수있는 VB 및 C#을 입력 객체의 변수를 통해 메소드를 호출하는 초점 방법을 가지고 있지 않습니다 오브젝트 C#에서VB에서

sub SetFocusControl(byref ctl as object) 
    ctl.Focus 
end sub 

컴파일러 불만

void SetFocusControl(ref object ctl) 
{ 
    ctl.Focus(); 
} 

방법 나는 C#에서 동일한 작업을 수행 할 수 있습니까?

감사

대신 객체를 사용

답변

4

는 초점 메소드가 유형을 사용합니다.

void SetFocusControl(Control ctl) 
{ 
    ctl.Focus(); 
} 

그리고 저는 심판이 필요하다고 생각하지 않습니다.

별도의 방법이 필요한지 물어볼 것입니다. Focus 메서드를 직접 호출 할 수는 없습니까?

ctl.Focus(); 

형식을 알 수 없거나 Focus 메서드가있는 경우이 작업을 수행 할 수 있습니다. 나는이 VB에서 작동하는 이유를 이야기하지만, C#에서 할 수

void SetFocusControl(object ctl) 
{ 
    Control control = ctl as Control 

    if (null == control) 
     return; 

    control.Focus(); 
} 
+0

감사합니다. 코드가 올바르게 작동하고 참조가 필요하지 않습니다. – Javier

0

는, 당신은 유형의 객체로 CTL 선언했습니다. Object에는 4 개의 공용 메서드 ToString, GetHashcode, GetType 및 Equals가 있습니다. C#에서 이렇게하려면 Control과 같은 다른 유형의 메서드 (예 : Focus 메서드 또는 해당 메서드가있는 인터페이스)를 받아야하는 메서드가 필요합니다. 또는 인수를받은 후에 형식 변환 및 확인을 수행해야합니다. Focus 메서드가있는 형식으로 개체를 가져옵니다.

+1

VB는 런타임에 쉽게 바인딩 할 수 있습니다. Option Strict를 사용하여이 동작을 변경할 수 있습니다. 여기를 참조하십시오 - http://msdn.microsoft.com/en-us/library/zcd4xwzs(VS.80).aspx – RichardOD