2014-10-04 160 views
0

我想將代碼塊從VB轉換爲C#,但運行時遇到了一行代碼。將代碼行從VB轉換爲C#

VB代碼:

Dim tsAV As System.Windows.Forms.ToolStrip = 
    CType(objHost.FormMain.Controls("tsMain"), Windows.Forms.ToolStrip) 

代碼,我在C#:

System.Windows.Forms.ToolStrip tsAV = 
    (System.Windows.Forms.ToolStrip)objHost.FormMain; 

我的問題進來的FormMain方法。當我使用VB代碼時,我可以得到Controls方法,但在C#中我不能。我使用兩種包含相同的接口DLL。

我做錯了什麼? DLL可能包含某些僅適用於VB的東西嗎?

+0

什麼是objHost?這個變量的類型是什麼? – 2014-10-04 18:57:42

+0

什麼是FormMain - 一個類或實例? – Plutonix 2014-10-04 18:58:36

回答

2

,您應該能夠使用這個作爲你的C#代碼:

// using System.Windows.Forms; 
ToolStrip tsAV = (ToolStrip)objHost.FormMain().Controls["tsMain"]; 
              ^^^^^^^^^^^^^^^^^^^ 

在你的榜樣,你正在努力鑄就FormToolStrip,這是行不通的。

+0

我的問題是,當你寫在C#中時,Visual Studio會對我說「FormMain是一種方法,不能在這種情況下使用」。在VB中,它工作得很好。 – 2014-10-04 19:19:05

+1

對於方法調用不使用括號,VB更爲寬容。 C#不是,當它告訴你,你應該只需要在方法調用中添加括號。我已更新我的帖子以反映這一點。 – 2014-10-04 19:21:22

+0

哇,可以發誓我試過這哈哈,但它的工作!謝謝你的幫助!還在學習大聲笑:) – 2014-10-04 19:26:33

0

如果您嘗試在c#Form中檢索ToolStrip,則可以使用以下代碼。這假定ToolStrip名稱是「tsAV」,並且您正在使用FormMain(這可能是主窗體的類名稱)中的方法執行此代碼。

using System.Windows.Forms; 
... 
FormMain form = new FormMain(); 
ToolStrip tsAV = (ToolStrip)form.Controls["tsMain"]; 

更新:

using System.Windows.Forms; 
... 
ToolStrip tsAV = (ToolStrip)Controls["tsMain"]; 

從形式之外,可以使用下面的代碼中找到ToolStrip的假設objHost是各種各樣的控制器和FormMain是一個字段或屬性名稱返回一個窗體的實例,而不是一類的名字,你可以使用以下命令:

using System.Windows.Forms; 
... 
ToolStrip tsAV = (ToolStrip)objHost.FormMain.Controls["tsMain"]; 
+0

感謝您的幫助! :) – 2014-10-04 19:37:55