2014-10-04 124 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