Замените контрольные массивы перед миграцией с vb6 - PullRequest
0 голосов
/ 10 октября 2008

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

Ответы [ 3 ]

1 голос
/ 10 октября 2008

В .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 для объединения событий, вызванных несколькими элементами управления, в один обработчик.

0 голосов
/ 13 октября 2008

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

0 голосов
/ 10 октября 2008

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

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

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

...