Замените контрольные массивы перед переходом с vb6

С целью избежать создания дополнительных препятствий для миграции при улучшении существующей программы vb6. Есть ли способ достичь той же функциональности, что и контрольные массивы в vb6, без их использования?


person kjack    schedule 09.10.2008    source источник


Ответы (3)


В .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

Вы также должны посмотреть на классы, которые наследуются от BaseControlArray в VB6.Compatibility, что автоматизирует часть работы. Я считаю, что использование тега менее подвержено ошибкам в процессе преобразования, чем использование имени элемента управления. Однако не стоит благодарить это за абсолют. Вам нужно будет решить, какой подход лучше всего - использовать имя элемента управления или использовать тег как индекс.

В любом случае вы можете легко настроить .NET для передачи событий, вызванных несколькими элементами управления, в один обработчик.

person RS Conley    schedule 10.10.2008
comment
Я думаю, ваша точка зрения заключается в том, что контрольные массивы в vb6 - это не проблема, которую нужно решить до миграции? - person kjack; 12.10.2008
comment
Вы должны знать об этом при миграции, так как существует большой потенциал для незначительных ошибок, поскольку вам придется делать все вручную. - person RS Conley; 14.10.2008

Что ж, вы всегда можете создать свой собственный массив элементов управления в коде :) Возможно, лучший контейнер - это объект Collection или Dictionary. В зависимости от того, что вы хотите сделать, вы, возможно, могли бы создать класс-оболочку для элемента управления с помощью настраиваемого класса коллекции ... но создание объектной модели намного лучше с использованием универсальных шаблонов в .NET, поэтому, вероятно, лучше пока не усложнять его в VB6 .

В пользовательских формах VBA отсутствует поддержка массивов элементов управления, поэтому почему бы не найти в Google предложения о том, как имитировать массивы элементов управления с помощью VBA, Userforms, Excel и т. Д.

Кстати, пробовали ли вы перенести контрольные массивы с VB6 на VB.NET? Просто предположение, но, учитывая, что они обычно используются в VB, я полагаю, что они обрабатываются довольно хорошо.

person onedaywhen    schedule 10.10.2008

Я немного почитал и поэкспериментировал за последние пару дней, и кажется, что в vb6 нет другого способа делать то, что делают контрольные массивы. Если вы уже знаете количество элементов управления, которые вы будете создавать во время выполнения, во время разработки, вы можете объявить переменные объекта частного элемента управления «с событиями» и динамически создавать их экземпляры во время выполнения. Если вам нужно создать что-то еще, вы можете это сделать, но у них не будет кода, который запускался бы в ответ на события. Насколько я понимаю, это суть проблемы. нет способа динамически связать код с событием динамически созданного элемента управления в vb6.

person kjack    schedule 12.10.2008