| FAQ по Visual Basic |
| Содержание / Начальные сведения о VB |
|
|
§ 3.5. Как в ран-тайме добавить на форму контрол?
Прежде всего, надо создать на форме элемент управления с индексом 0. Для примера пусть это будет текстовое поле. Положите на форму TextBox и установите ему Index = 0. В нужный момент новые элементы создаются с помощью оператора Load:
Private Sub Form_Load()
Dim i As Long
For i = 1 To 8
Load Text1(i)
With Text1(i)
.Move 0, Text1(0).Height * (i - 1)
.Text = i
.Visible = True
End With
Next i
End Sub
Обратите внимание: свойство Visible только что созданного контрола всегда равно False, поэтому чтобы он отображался на экране, это свойство нужно установить в True. Аналогично, имеет смысл определить положение и размеры контрола. Заголовок процедуры-обработчика событий для массива контролов отличается от аналогичного для простого контрола: Private Sub Text1_Change(Index As Integer) End Sub Здесь появляется лишний аргумент — индекс элемента управления, по которому можно точно определить объект, от которого пришло событие. Если тип создаваемого объекта неизвестен или если вам не хочется создавать лишние элементы управления на форме, то можно пойти другим путем.
Private Sub Form_Load()
Dim i As Long, tb As TextBox
For i = 1 To 8
Set tb = Controls.Add("VB.TextBox", _
"Text" & i)
With tb
.Move 0, ScaleY(21, vbPixels) * (i - 1), _
ScaleX(80, vbPixels), _
ScaleY(21, vbPixels)
.Text = i
.Visible = True
End With
Next i
End Sub
Здесь элементы управления создаются с помощью функции Controls.Add; первый аргумент — ProgID контрола, второй — его будущее имя. Чтобы ловить события от созданных контролов, нужно описать их с ключевым словом WithEvents. Но если создаваемых элементов много, то можно проделать такой трюк. Добавьте в проект класс clsHandler и вставьте в него следующий код:
Private WithEvents mTextBox As TextBox
Private mParent As Form1
Public Sub Initialize(ByVal Object As TextBox, _
ByVal Parent As Form1)
Set mTextBox = Object
Set mParent = Parent
End Sub
Private Sub mTextBox_Change()
Form1.TextBoxChange mTextBox
End Sub
А этот код поместите в модуль формы:
Private mHandlers() As clsHandler
Public Sub TextBoxChange(ByVal Object As TextBox)
Object.Text = UCase$(Object.Text)
End Sub
Private Sub Form_Load()
Dim i As Long, tb As TextBox
ReDim mHandlers(1 To 8)
For i = 1 To 8
Set tb = Controls.Add("VB.TextBox", "Text" & i)
With tb
.Move 0, ScaleY(21, vbPixels) * (i - 1), _
ScaleX(80, vbPixels), _
ScaleY(21, vbPixels)
.Text = i
.Visible = True
End With
Set mHandlers(i) = New clsHandler
mHandlers(i).Initialize tb, Me
Next i
End Sub
Запустите проект и попробуйте
Автор: |
||
| Предыдущий раздел | Следующий раздел |
| © 2004. При цитировании, пожалуйста, не забудьте поставить ссылку на оригинальную страницу. |