将代码从VB6转换为VB.NET后,我得到了以下结果代码:
设计师表单代码:
Public WithEvents Timer1 As Microsoft.VisualBasic.Compatibility.VB6.TimerArray
Me.Timer1 = New Microsoft.VisualBasic.Compatibility.VB6.TimerArray(components)
代码实施:
Private Function GetBaseControl(ByRef a_type As String) As System.Windows.Forms.Control Implements GetBaseControl
Select Case a_type
Case "Web"
GetBaseControl = ctBrowser1(0)
Case "Timer"
GetBaseControl = Timer1(0)
End Select
End Function
这是我收到的错误:
类型'Boolean'的值无法在行
GetBaseControl = Timer1(0)
转换为'System.Windows.Forms.Control'。
在VB6中运行良好虽然!!
答案 0 :(得分:1)
如果这在VB6中有效,那么代码遵循一些非常糟糕的做法来返回布尔Enabled
而不是实际的Timer
组件。它至少意味着Option Strict已关闭,而且非常糟糕。
在这种情况下,.Net中的Timers
不再被视为控件。相反,它们是Components
。您将需要重新思考此代码的功能。如何使用代码的示例可能让我们推荐一种不同的(更好的)方法来解决问题。
在这种情况下,我怀疑重新考虑使用重载方法(这对于vb6而言不是惯用的)会产生更好的结果,特别是在保持类型安全而不是传递字符串方面。
注意:在第二天编辑问题之前,这个答案更有意义