0

为了避免构建进一步的迁移障碍,同时增强现有的 vb6 程序。有没有办法在不使用它们的情况下实现与 vb6 中的控制数组相同的功能?

4

3 回答 3

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 以将多个控件引发的事件集中到一个处理程序中。

于 2008-10-10T14:00:02.157 回答
0

好吧,您总是可以在代码中创建自己的控件数组 :) 不过,也许更好的容器是 Collection 或 Dictionary 对象。根据您想要做的事情,您也许可以使用自定义集合类为控件创建一个包装类......但是在 .NET 中使用泛型创建对象模型要好得多,所以现在最好在 VB6 中保持简单.

VBA 用户窗体缺乏对控件数组的支持,所以为什么不 Google 寻求有关如何使用 VBA、用户窗体、Excel 等模拟控件数组的建议呢?

顺便说一句,您是否尝试过将控件数组从 VB6 迁移到 VB.NET?只是一个猜测,但考虑到它们在 VB 中很常用,我想它们处理得很好。

于 2008-10-10T07:43:26.360 回答
0

在过去的几天里,我做了一些阅读和实验,似乎在 vb6 中没有其他方法可以完成控制数组所做的事情。如果您已经知道将在运行时、设计时创建的控件的数量,那么您可以声明私有控件对象变量“带有事件”并在运行时动态地实例化这些。如果您需要创建更多内容,则可以这样做,但这些内容不会触发任何代码来响应事件。据我所知,这是问题的关键。在 vb6 中,无法将代码与动态创建的控件的事件动态关联。

于 2008-10-12T20:06:03.180 回答