Вопрос № 178332: Уважаемые эксперты подскажите в следующем: имеется форма, на ней в строку слева направо размещены два флажка текстовое поле и кнопка. Действие кнопки в зависимости от введённого в поле слова. Как сделать, чтобы в зависимости от ситуации на форме п...
Вопрос № 178332:
Уважаемые эксперты подскажите в следующем: имеется форма, на ней в строку слева направо размещены два флажка текстовое поле и кнопка. Действие кнопки в зависимости от введённого в поле слова. Как сделать, чтобы в зависимости от ситуации на форме появилось столько указанных строк с элементами управления сколько нужно. Спасибо.
Отвечает Филатов Евгений Геннадьевич, Студент :
Здравствуйте, Ципихович Эндрю. в общем, сделал так, как я понял задачу. если что-то не так, обсудим в форуме.
создайте новый проект, в нем должна быть форма Form1 и модуль Module1. свойство проекта "Startup Object" должно быть установлено в "Sub Main". сохраните проект. затем любым текстовым редактором замените содержимое формы и модуля из приложения.
в программе я постарался достаточно подробно описать все операции.
Ответ отправил: Филатов Евгений Геннадьевич, Студент
Ответ отправлен: 11.05.2010, 23:39
Номер ответа: 261345
Оценка ответа: 4
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261345
на номер 1151 (Россия) |
Еще номера »
Отвечает HookEst, Специалист :
Здравствуйте, Ципихович Эндрю.
"Повесить" обработчик события для runtime созданного элемента в MS Word, без использования VBProject, можно с помощью классов. в прикрепленном файле: класс DataRowCollection представляет собой коллекцию строк элементов на форме. для создания строки используется метод Add доступ к конкретной строке по свойству Item при нажатии на кнопку строки возникает событие OnButtonClick
класс DataRow представляет собой одну строку элементов на форме.
Создавать его отдельно - не нужно. только ч/з DataRowCollection.Add доступ к значениям элементов, ч/з свойства DataRow
для использования нужно изменить метод DataRow.InitializeControls в нем задются список состояний, ширина/высота элементов
и переопределить обработчик в модуле формы DataRows_OnButtonClick(DataRow As DataRow) в нем делайте, то что Вам нужно по нажатию кнопки... DataRow - та строка, на кнопку которой нажали...
ну и додела
ть что я там упустил... Успехов. Прикрепленный файл:загрузить »
Ответ отправил: HookEst, Специалист
Ответ отправлен: 13.05.2010, 09:49
Номер ответа: 261363
Оценка ответа: 4
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261363
на номер 1151 (Россия) |
Еще номера »
Отвечает Измалков Эдуард Леонидович, 6-й класс :
Здравствуйте, Ципихович Эндрю. В целом мой ответ по принципу работы совпадает с предыдущем, разница в том, что класс используется только для обработки нажатия кнопки. Все остальные действия производятся при инициализации формы. Во-первых, нужно создать пустую форму с названием "Экспертиза" и модуль класса "clsBtnClick". В код формы вставить следующий код:
Код:
Option Explicit Private cmdBArray() As clsBtnClick
Private Sub UserForm_Initialize() Const elemNum As Integer = 10 ' сколько создать элементов Const vHeight As Integer = 25 ' высота строки элементов Const fWidth As Integer = 909 ' ширина формы Const vBetween As Integer = 10 ' отступ между строками элементов Const v
Top As Integer = 42 ' отступ сверху до первого элемента Const vBottom As Integer = 42 ' отступ от последнего элемента до нижнего края формы Dim i As Integer
Me.Height = vTop + elemNum * (vHeight + vBetween) + vBottom ' отступы сверху-снизу-между элементами, плюс элементы Me.Width = fWidth For i = 1 To elemNum ' добаление первого флажка With Me.Controls.Add("Forms.OptionButton.1", CStr(i) & "1_OB") .Left
= 51.75 .Top = vTop + (i - 1) * (vHeight + vBetween) .Height = vHeight .Width = 25 .GroupName = "Gr" & i ' группа используется для группировки флажков (может быть выставлен только один флаг из группы) End With ' добавление второго флажка With Me.Controls.Add("Forms.OptionButton.1", CStr(i) & "2_OB") .Left = 159 .Top = vTop + (i - 1
) * (vHeight + vBetween) .Height = vHeight .Width = 25 .GroupName = "Gr" & i ' группа используется для группировки флажков (может быть выставлен только один флаг из группы) End With ' добавление combobox With Me.Controls.Add("Forms.ComboBox.1", CStr(i) & "_ComB") .Left = 222 .Top = vTop + (i - 1) * (vHeight + vBetween) .Height = vHeight .Width = 210
' сюда еще нужно добавить строки добавления элементов ' ' End With ' добавление первого текстового поля With Me.Controls.Add("Forms.TextBox.1", CStr(i) & "1_TB") .Left = 444 .Top = vTop + (i - 1) * (vHeight + vBetween) .Height = vHeight .Width = 54 End With ' добавление второго текстового поля With Me.C
ontrols.Add("Forms.TextBox.1", CStr(i) & "2_TB") .Left = 510 .Top = vTop + (i - 1) * (vHeight + vBetween) .Height = vHeight .Width = 300 End With ' добавление кнопки ReDim Preserve cmdBArray(i - 1) Set cmdBArray(i - 1) = New clsBtnClick Set cmdBArray(i - 1).cmdB = _ Me.Controls.Add("Forms.CommandButton.1", CStr(i)) With cmdBArray(i - 1).cmdB .Caption
= "Записать" .Left = 822 .Top = vTop + (i - 1) * (vHeight + vBetween) .Height = vHeight .Width = 48 End With Next i End Sub
Public Sub btnProc(i As Integer) Dim myText As String If Me.Controls(CStr(i) & "1_OB").Value Then _ MsgBox$ Me.Controls(CStr(i) & "1_TB").Text & Me.Controls(CStr(i) & "2_TB").Text & " назначен" If Me
.Controls(CStr(i) & "2_OB").Value Then _ MsgBox$ Me.Controls(CStr(i) & "1_TB").Text & Me.Controls(CStr(i) & &
quot;2_TB").Text & " заключен" End Sub
в код класса вставить следующее:
Код:
Option Explicit
Public WithEvents cmdB As MSForms.CommandButton Attribute cmdB.VB_VarHelpID = -1
Private Sub cmdB_Click() Call Экспертиза.btnProc(CInt(Val(cmdB.Name)))
' здесь идет привязка к определенной форме End Sub
Ответ отправил: Измалков Эдуард Леонидович, 6-й класс
Ответ отправлен: 13.05.2010, 13:55
Номер ответа: 261369
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261369
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.