Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как обратиться к уже созданным на форме label'ам? Добавлено: 21.03.11 14:06  

Автор вопроса:  MalishOK
Как обратиться к уже созданным на форме label'ам в цикле? наподобие label(i). А то так не работает.

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 21.03.11 16:16
Загони в List(Of Label)

Ответить

Номер ответа: 2
Автор ответа:
 andrey



ICQ: 305986093 

Вопросов: 3
Ответов: 41
 Профиль | | #2 Добавлено: 22.03.11 09:03
Приведу цитату с другого форума, дабы не изобретать велосипед:
Массивы элементов управления в Visual Basic 2008.

Хотя массивы элементов управления больше не поддерживаются в Visual Basic 2008, с помощью модели событий можно дублировать и максимально использовать функциональные возможности массива элементов управления.

Концептуальные различия

В Visual Basic 6.0 массивы элементов управления можно использовать для работы с элементами управления в форме; они обеспечивают возможность общего доступа к обработчикам событий, итерацию групп элементов управления и их добавление во время выполнения.
В Visual Basic 2008 массивы элементов управления больше не поддерживаются. Изменения в модели событий делают массивы элементов управления ненужными; .NET Framework предоставляет те же возможности для работы с элементами управления.

Общий доступ к обработчикам событий

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

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

Например, в форму можно добавить два элемента управления Button (Button1 и Button2) и элемент управления CheckBox (CheckBox1), а затем создать обработчик для события Click, общий для этих трех элементов управления.
  1. Private Sub MixedControls.Click(ByVal sender As System.Object,  _
  2. ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click

Итерация элементов управления

Другая возможность массива элемента управления Visual Basic 6.0 позволяла выполнять итерацию группы элементов управления с помощью свойства Index. Например, чтобы удалить текст всех элементов управления TextBox в массиве, нужно было выполнить цикл по массиву элементов управления с помощью свойства Index в качестве переменной цикла.

Элементы управления Visual Basic 2008 не имеют свойства Index, однако можно итерировать элементы управления в форме или контейнере с помощью объекта Control..::.ControlCollection класса Control.

В Visual Basic 6.0 элементы управления одного массива могли быть размещены в разных контейнерах. Например, элементы управления TextBox, содержащиеся в двух разных элементах управления Frame, могли быть частью одного массива.

В Visual Basic 2008 коллекция Controls возвращает только элементы управления, размещенные в одном контейнере. Необходимо отдельно выполнить итерацию элементов управления каждого контейнера; это можно сделать с помощью рекурсивной функции.

Добавление элементов управления во время выполнения

В Visual Basic 6.0 элементы управления можно было добавить к массиву во время выполнения с помощью оператора Load. Элементы управления должны были иметь тот же тип, что и массив, а массив требовалось создать в режиме разработки, по крайней мере с одним элементом. После добавления элемента управления требовалось задать значение True для свойства Visible.

В Visual Basic 2008 элементы управления добавляются во время выполнения с помощью ключевого слова New в операторе Dim, затем использовать метод Add для контейнера, в который нужно добавить элемент управления.

Добавление обработчиков событий во время выполнения

В Visual Basic 6.0 при добавлении элемента управления к массиву во время выполнения новые события элементов управления автоматически обрабатывались событиями этого массива.

В Visual Basic 2008 требуется определить обработчики событий для элементов управления, добавляемых во время выполнения. Это делается с помощью оператора AddHandler.

Изменения кода для массива элементов управления

В следующем коде показаны различия в методах программирования между Visual Basic 6.0 и Visual Basic 2008.

Общий доступ к обработчикам событий

В следующем примере демонстрируется общий доступ к обработчику событий Change (TextChanged в Visual Basic 2008) для группы из трех элементов управления TextBox. В Visual Basic 2008 предложение Handles обработчика событий указывает, какое управление событием будет обрабатываться. Обработчик событий возвращает универсальный Object, поэтому он должен быть приведен к отдельному типу объекта (в данном случае, TextBox), который нужно обработать с помощью метода DirectCast.
  1. ' Visual Basic 6.0
  2. Private Sub Text1_Change(Index As Integer)
  3. Select Case Index
  4. Case 0
  5. MsgBox("The text in the first TextBox has changed")
  6. Case 1
  7. MsgBox("The text in the second TextBox has changed")
  8. Case 2
  9. MsgBox("The text in the third TextBox has changed")
  10. End Select
  11. End Sub

  1. ' Visual Basic 2008
  2. Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
  3. ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
  4. TextBox2.TextChanged, TextBox3.TextChanged
  5. Select Case DirectCast(sender, TextBox).Name
  6. Case TextBox1.Name
  7. MsgBox("The text in the first TextBox has changed")
  8. Case TextBox2.Name
  9. MsgBox("The text in the second TextBox has changed")
  10. Case TextBox3.Name
  11. MsgBox("The text in the third TextBox has changed")
  12. End Select
  13. End Sub

Примечание.
Поведение событие несколько отличается в Visual Basic 2008. Событие TextChanged создается при инициализации каждого элемента управления (например, в событии Form_Load), а также при изменении текста во время выполнения. В Visual Basic 6.0 событие Change создавалось только при изменении текста.

Итерация элементов управления

В следующем примере показана функция для итерации группы элементов управления текстового поля и удаления текста. В примере Visual Basic 6.0 свойство Index массива элементов управления используется как переменная цикла.
В Visual Basic 2008 объект Control передается как аргумент; он содержит коллекцию Control..::.ControlCollection, включающую все элементы управления, размещенные в этом элементе управления. Оператор Typeof используется для того, чтобы определить, каждый ли элемент управления имеет тип TextBox.

Примечание.
Объект Form имеет тип Control; можно также передать Form как аргумент.

Так как вложенные элементы управления не включены в коллекцию Control..::.ControlCollection, метод HasChildren используется, чтобы определить, содержит ли каждый элемент управления другие элементы управления — если содержит, функция ClearText вызывается рекурсивно.
  1. ' Visual Basic 6.0
  2. Private Sub ClearText()
  3. For i = 0 To Text1().UBound
  4. Text1(i).Text = ""
  5. Next
  6. End Sub

  1. ' Visual Basic 2008
  2. Private Sub ClearText(ByVal container As Control)
  3. Dim ctrl As Control
  4. For Each ctrl In container.Controls
  5. If TypeOf (ctrl) Is TextBox Then
  6. ctrl.Text = ""
  7. End If
  8. If ctrl.HasChildren Then
  9. ClearText(ctrl)
  10. End If
  11. Next
  12. End Sub

Добавление элементов управления во время выполнения

В следующем примере показано добавление элемента управления текстового поля к форме во время выполнения. В Visual Basic 6.0 элемент управления добавляется к массиву элементов управления. В Visual Basic 2008 элемент управления добавляется к коллекции Control..::.ControlCollection. В Visual Basic 6.0 события нового объекта TextBox автоматически обрабатывались массивом элементов управления. В Visual Basic 2008 необходимо подключить обработку событий с помощью оператора AddHandler.

В обоих примерах предполагается, что элемент управления текстового поля добавляется к форме в режиме разработки, а в примере Visual Basic 6.0 — что был создан массив с одним элементом управления. В примере Visual Basic 2008 также предполагается, что для первого элемента управления TextBox имеется обработчик событий с именем TextChangedHandler.
  1. ' Visual Basic 6.0
  2. Private Sub AddControl()
  3. ' Add a TextBox as the second element of a control array.
  4. Load Text1(1)
  5. ' Set the location below the first TextBox.
  6. Text1(1).Move Text1(0).Left, Text1(0).Top + 500
  7. ' Make the new TextBox visible
  8. Text1(1).Visible = True

  1. ' Visual Basic 2008
  2. ' Declare a new TextBox.
  3. Dim TextBox2 As New TextBox
  4. ' Set the location below the first TextBox
  5. TextBox2.Left = TextBox1.Left
  6. TextBox2.Top = TextBox1.Top + 30
  7. ' Add the TextBox to the form's Controls collection.
  8. Me.Controls.Add(TextBox2)
  9. AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Замечания по обновлению

При обновлении приложения, созданного с помощью Visual Basic 6.0, до версии Visual Basic 2008 любые массивы элементов управления обновляются до специальных классов массивов отдельных элементов управления. Эти классы содержатся в пространстве имен Microsoft.VisualBasic.Compatibility.VB6 и используются инструментами обновления для эмулирования поведения массива элементов управления Visual Basic 6.0.
Хотя эти классы можно использовать в новой разработке Visual Basic 2008, вместо этого рекомендуется использовать модель событий и функции .NET Framework.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам