2009-07-05 44 views
1

在VB中我能做到這一點調用了VB和C#的對象類型變量的方法

sub SetFocusControl(byref ctl as object) 
    ctl.Focus 
end sub 
在C#

編譯器抱怨對象沒有對焦方式

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

如何我可以在c#中做同樣的事嗎?

謝謝

回答

4

而不是使用對象,使用具有焦點方法的類型。

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

而我不認爲你需要參考。

我也問你是否需要一個單獨的方法。你能否直接調用Focus方法?

ctl.Focus(); 

如果您不知道該類型或者是否具有Focus方法,則可以這樣做。

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

    if (null == control) 
     return; 

    control.Focus(); 
} 
+0

謝謝,你的代碼工作正常,你是對的我不需要使用ref。 – Javier 2009-07-05 14:41:00

0

我不能說爲什麼這個工程在VB中,但在C#中,你已經聲明ctl作爲類型對象。對象有四個公共方法ToString,GetHashcode,GetType和Equals。要在c#中執行此操作,您需要該方法接受具有Focus方法(或具有該方法的接口)的不同類型(如Control),或者在收到參數後需要進行類型轉換和檢查將對象轉換爲具有Focus方法的類型。

+1

VB允許輕鬆進行後期綁定 - 您可以使用Option Strict更改此行爲。看到這裏 - http://msdn.microsoft.com/en-us/library/zcd4xwzs(VS.80).aspx – RichardOD 2009-07-05 14:13:08