以期避免构建进一步的移民障碍 增强现有的vb6程序。 有没有办法在vb6中实现与控制数组相同的功能而不使用它们?
答案 0 :(得分:1)
在.NET中,您有一个标记属性。您还可以使用多个控件引发的相同委托处理事件。将新控件的Tag属性设置为Index。
Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click,Button2.Click
Dim Btn As Button = CType(sender, Button)
Dim Index As Integer = CType(Btn.Tag, Integer)
' Do whatever you were doing in VB6 with the Index property
End Sub
您还应该查看VB6.Compatibility中从BaseControlArray继承的类,这些类可以自动执行某些工作。我发现在转换过程中使用Tag比依赖控件名称更不容易出错。但是不要感谢这是绝对的。您必须确定控件名称方法是最佳还是标记作为索引方法。
在任何一种情况下,您都可以轻松设置.NET,将多个控件引发的事件汇集到一个处理程序中。
答案 1 :(得分:0)
好吧,你总是可以在代码中创建自己的控件数组:)也许更好的容器是Collection或Dictionary对象。根据你想要做的事情,你可以用自定义集合类为控件创建一个包装类...但是在.NET中使用泛型创建一个对象模型要好得多,所以最好在VB6中保持简单
VBA Userforms缺乏对控件阵列的支持,那么为什么Google不会提供有关如何使用VBA,Userforms,Excel等模拟控件数组的建议
BTW您是否尝试过将控制数组从VB6迁移到VB.NET?只是猜测,但考虑到它们在VB中常用,我想它们处理得很好。答案 2 :(得分:0)
在过去的几天里我做了一些阅读和实验,似乎vb6中没有其他办法能够完成控制数组所做的事情。 如果您已经知道在运行时将要创建的控件数量,那么您可以在运行时动态地声明私有控件对象变量“with events”和实例。如果您需要再创建,那么您可以这样做,但这些代码不会响应事件而触发任何代码。 据我所知,这是问题的核心。没有办法在vb6中动态地将代码与动态创建的控件的事件相关联。