2008-09-02 2 views
8

Возможно, я еще не знаю .NET достаточно хорошо, но я еще не нашел удовлетворительного способа легко реализовать этот простой код VB6 в .NET (предположим, что этот код находится в форме с N CommandButtons в массиве Command1() и N TextBoxes в массиве Текст1()):Какой простой .NET-эквивалент массива управления VB6?

Private Sub Command1_Click(Index As Integer) 

    Text1(Index).Text = Timer 

End Sub 

Я знаю, что это не очень полезно код, но он демонстрирует легкость, с которой массивы могут быть использованы в VB6 управления. Каков самый простой эквивалент в C# или VB.NET?

+0

См. Также http://stackoverflow.com/questions/5497403/control-array-in-vb-net и http://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net – MarkJ 2011-04-21 11:42:34

+0

Возможно вы могли бы проверить в будущем мою идею: http://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net/42627033#42627033, я думаю, что это решение этого сложного вопроса. – 2017-03-07 10:09:06

ответ

5

Сделать общий список текстовых полей:

var textBoxes = new List<TextBox>(); 

// Create 10 textboxes in the collection 
for (int i = 0; i < 10; i++) 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "Textbox " + i; 
    textBoxes.Add(textBox); 
} 

// Loop through and set new values on textboxes in collection 
for (int i = 0; i < textBoxes.Count; i++) 
{ 
    textBoxes[i].Text = "New value " + i; 
    // or like this 
    var textBox = textBoxes[i]; 
    textBox.Text = "New val " + i; 
} 
0

Сделать массив элементов управления.

TextBox[] textboxes = new TextBox[] { 
    textBox1, 
    textBox2, 
    textBox3 
}; 
4

Еще одна приятная вещь, что VB .NET делает, имея один обработчик события, который обрабатывает несколько элементов управления: библиотека совместимости

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles TextBox1.TextChanged, _ 

     TextBox2.TextChanged, _ 

     TextBox3.TextChanged 

End Sub 
1

VisualBasic .NET содержит сильные массивы управления типизированных. Это то, что мастер обновления использует для замены текущих массивов управления VB6.

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

В заключение, с появлением дженериков, то ничего не мешает вам использовать

List<YourControl> MyControlArray. 
2

Есть два аспекта.

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

Однако разработчик .NET-форм не поддерживает массивы управления по простой причине: массивы элементов управления создаются/расширяются во время выполнения. Если вы знаете, сколько элементов управления вам нужно во время компиляции (рассуждения идут), вы даете им разные имена и не помещаете их в массив.

Я знаю, что это не очень полезно код

Это именно точка. Почему есть функция, если она бесполезна?

При необходимости, вы можете также получить доступ к управлению по имени, в результате чего-то вроде этого:

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click … 
    Dim name As String = DirectCast(sender, Control).Name 
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length)) 
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString() 
End Sub 
0

То же событие щелчка может обрабатывать нажатие кнопок с нескольких кнопок в .Net. Затем вы можете добавить текстовое поле для поиска в свойстве Tag?

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click 
    Dim c As Control = CType(sender, Control) 
    Dim t As TextBox = FindControl(CType(c.Tag, String)) 
    If t Is Not Nothing Then 
    t.Text = "Clicked" 
    End If 
End Sub 
3

Существует нет реального 1 к 1 аналог в .Net. Конечно, вы можете создавать массивы или списки элементов управления определенного типа, но нет ничего, что сделало бы это для вас автоматически.

Однако я никогда не видел контрольный массив, в который нельзя было реорганизовать.Net к чему-то лучше. В качестве примера можно привести пример. В опубликованном вами сценарии вы используете массивы управления, чтобы спарить кнопку с текстовым полем. В .Net вы, вероятно, сделаете это с помощью настраиваемого элемента управления. Пользовательский элемент управления будет состоять из кнопки, текстового поля и, возможно, общего/статического таймера. Форма использует несколько экземпляров этого настраиваемого элемента управления. Вы реализуете логику, необходимую для управления один раз, и изолированы от собственного исходного файла, который можно отследить и отредактировать в исходном элементе управления, не требуя слияния с более крупным классом формы или легко повторно использовать в нескольких формах или даже в нескольких проектах , Вам также не нужно беспокоиться о том, что индекс командной кнопки совпадает с индексом текстового поля.

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

0

Два основных преимущество управления массивов в VB6 было: (1) Они предоставили для вас способ итерации по коллекции элементов управления (2) Они позволили обмениваться событиями между элементами управлением

(1) может быть выполнено в .Net с помощью массива элементов управления (2) может быть достигнуто за счет наличия одного элемента управления несколькими элементами управления (синтаксис немного отличается, потому что вы используете аргумент sender вместо myArray(index)).

Одна хорошая вещь .Net заключается в том, что эти функции отделены друг от друга. Например, вы можете иметь элементы управления, которые обмениваются событиями, даже если они не являются частью массива и имеют разные имена и даже разные типы. И вы можете выполнять итерацию через набор элементов управления, даже если они имеют совершенно разные события.

Смежные вопросы