Консультация № 178332
11.05.2010, 08:46
0.00 руб.
0 20 3
Уважаемые эксперты подскажите в следующем:
имеется форма, на ней в строку слева направо размещены два флажка текстовое поле и кнопка. Действие кнопки в зависимости от введённого в поле слова. Как сделать, чтобы в зависимости от ситуации на форме появилось столько указанных строк с элементами управления сколько нужно. Спасибо.

Обсуждение

Неизвестный
11.05.2010, 18:08
общий
немного не понял смысл вопроса.
1. в поле вводится слово. это слово может быть любым, либо должно выбираться из списка? ведь потом все равно производится проверка и проверяются условия. может есть смысл не вводить данные в поле, а сразу выбирать из стандартного списка ( который можно будет дополнить потом ) .
2. непонятно зачем флажки
3. текстовое поле и одна кнопка должны обязательно присутствовать на форме. остальные элементы управления создаются программно при обработке. что создается программно? еще такие же текстовые поля и кнопки в столбик под первой строкой с обязательными элементами? может это что-то похожее на автофильтр в Excel - там можно задавать несколько условий отбора и при создании нового условия добавляется строка для следующего.
Неизвестный
11.05.2010, 19:29
общий
Филатов Евгений Геннадьевич:
В документе например имеется много терминов
Например интерисущих меня восемь
Вот нужно на форме вывести восемь строк в данном случае
В строке слева направо два флажка, поле в которое нужно загнать термин и кнопка
Пользователь увидел термин например золото выбрал флажки например купить отложить и нажал кнопку, а далее дело техники
Неизвестный
11.05.2010, 19:48
общий
т.е. есть какой-то массив в программе, где хранятся названия этих терминов. как он заполняется, пока не важно.

пользователь выбирает одно наименование ( падающее меню со списком, отсортированном по возрастанию, причем уже отобранные в этот список не входят ) и после выбора переключателя купить/отложить ( т.к. одновременно оба условия выбирать нельзя ) нажимает кнопку "выполнить".
в зависимости от положения переключателя :
1. "купить" - в нижней части формы добавляется новая строка элементо управления "label"=выбор позиции в меню, "Text"=пустое, пара кнопок "Выполнить" и "Удалить из списка"
2. "отложить" - ничего не делается.
при любом положении переключателей выбранная позиция в списке из него исключается.

и еще есть кнопка "обновить список" - тогда включается полный список и убираются уже созданные дополнительные элементы управления


нужно отработать именно создание/удаление нижних элементов управления? так я понимаю?
Неизвестный
11.05.2010, 23:39
общий
это ответ
Здравствуйте, Ципихович Эндрю.
в общем, сделал так, как я понял задачу. если что-то не так, обсудим в форуме.

создайте новый проект, в нем должна быть форма Form1 и модуль Module1. свойство проекта "Startup Object" должно быть установлено в "Sub Main". сохраните проект. затем любым текстовым редактором замените содержимое формы и модуля из приложения.

в программе я постарался достаточно подробно описать все операции.

попробую прикрепить файл с исходниками.

С уважением.

Приложение:
Module1.bas

Attribute VB_Name = "Module1"
Option Explicit

'нумерация элементов массивов с 1
Option Base 1

'это сам список для выбора. его заполнение нужно делать в самом начале
Public a(5) As String

'это дополнительные списки для работы программы

'это общий список, с которым будет работать программа. заполняется один раз.
'в массиве all_text текстовое наименование ( не меняется ) , в all_num выбор ( меняется программно ) :
'0-не выбран, 1-"купить", 2-"отложить"
Public all_text() As String
Public all_num() As Byte

'это список для меню выбора. заполняется номерами только тех элементов из all_text, у которых all_num=0
Public men_num() As Long

'это список для уже отобранных элементов меню. заполняется номерами только тех элементов из all_text, у которых all_num=1
Public sel_num() As Long


'это переменные, которые используются для промежуточных результатов
Public i As Long
Public i1 As Long
Public i2 As Long
Public s As String
Public b As Byte

'текущее количество отобранных элементов из списка
Public element As Long


Public Sub main()

i = 0
i1 = 0
s = ""
b = 0
element = 0

'заполняем начальные данные массива. можно сделать другое заполнение из базы и т.п.
a(1) = "золото"
a(2) = "серебро"
a(3) = "платина"
a(4) = "фольфрам"
a(5) = "титан"

'загружаем форму в память
Load Form1


'определяем размер временных массивов в программе по размеру основного массива
ReDim all_text(UBound(a))
ReDim all_num(UBound(a))

'заполняем данными главный массив
For i = 1 To UBound(a)
all_text(i) = a(i)
all_num(i) = 0
Next

'вызываем процедуру заполнения меню
Form1.menu

'открываем форму
Form1.Show vbModal


End
End Sub






Form1.frm

VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 8010
ClientLeft = 60
ClientTop = 450
ClientWidth = 10770
LinkTopic = "Form1"
ScaleHeight = 8010
ScaleWidth = 10770
Begin VB.CommandButton Command2
BackColor = &H00C0FFFF&
Caption = "Исключить"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 0
Left = 9120
Style = 1 'Graphical
TabIndex = 10
Top = 600
Visible = 0 'False
Width = 1455
End
Begin VB.CommandButton Command1
BackColor = &H00C0FFFF&
Caption = "Выбрать"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 0
Left = 7200
Style = 1 'Graphical
TabIndex = 9
Top = 600
Visible = 0 'False
Width = 1335
End
Begin VB.TextBox Text1
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 0
Left = 3360
TabIndex = 8
Text = "Значение"
Top = 600
Visible = 0 'False
Width = 3735
End
Begin VB.CommandButton Comm3
BackColor = &H00C0E0FF&
Caption = "Обновить список"
Height = 495
Left = 7920
Style = 1 'Graphical
TabIndex = 6
Top = 240
Width = 975
End
Begin VB.CommandButton Comm1
BackColor = &H00C0E0FF&
Caption = "Выход"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 615
Left = 9360
Style = 1 'Graphical
TabIndex = 5
Top = 120
Width = 1095
End
Begin VB.CommandButton Comm2
BackColor = &H00C0E0FF&
Caption = "Выбрать"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 5760
Style = 1 'Graphical
TabIndex = 4
Top = 240
Width = 1575
End
Begin VB.Frame Frame1
Height = 495
Left = 2760
TabIndex = 1
Top = 120
Width = 2775
Begin VB.OptionButton Option2
Caption = "отложить"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 1320
TabIndex = 3
Top = 200
Width = 1335
End
Begin VB.OptionButton Option1
Caption = "купить"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 120
TabIndex = 2
Top = 200
Value = -1 'True
Width = 1095
End
End
Begin VB.ComboBox Combo1
Height = 315
Left = 120
TabIndex = 0
Top = 240
Width = 2535
End
Begin VB.Label Label1
BackStyle = 0 'Transparent
Caption = "Наименование"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 204
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 0
Left = 120
TabIndex = 7
Top = 600
Visible = 0 'False
Width = 3135
End
Begin VB.Line Line1
X1 = 120
X2 = 10560
Y1 = 960
Y2 = 960
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Comm1_Click()
Form1.Hide
End Sub

Private Sub Comm2_Click()
'если выбран какой-то элемент из списка
If Form1.Combo1.ListIndex >= 0 Then
If Form1.Option1 = True Then
'если выбрано "купить" - отмечаем 1
'подробнее с индексами
'если в меню не выбран ни один элемент, то Form1.Combo1.ListIndex=-1
'иначе будет номер элемента. нумерация начинается с 0, поэтому прибавляем 1 чтобы перейти к нашему массиву
'в итоге (Form1.Combo1.ListIndex + 1) = номер выбранного элемента из списка
'men_num(Form1.Combo1.ListIndex + 1) = номер в основном массиве для выбранного элемента в списке
all_num(men_num(Form1.Combo1.ListIndex + 1)) = 1
'перерисовываем форму
Form1.Paint
Form1.menu
Else
'если выбрано "отложить" - отмечаем 2
all_num(men_num(Form1.Combo1.ListIndex + 1)) = 2
'перерисовываем форму
Form1.Paint
Form1.menu
End If
End If
End Sub


Public Sub Paint()
'процедура удаления/создания элементов управления на форме

'сначала нужно удалить все ранее созданные объекты
'можно было бы обойтись без удаления ранее созданных при добавлении нового,
'но это сильно усложнит задачу.
'к тому же нужно было бы проверять и удалять нижнюю часть объектов
'при исключении элементов из середины списка
For i = 1 To element
Unload Form1.Label1(i)
Unload Form1.Text1(i)
Unload Form1.Command1(i)
Unload Form1.Command2(i)
Next

'проверяем список элементов и определяем количество отобранных
element = 0
For i = 1 To UBound(all_text)
If all_num(i) = 1 Then element = element + 1
Next

'если есть отобранные, то создаем новые элементы управления
'и определяем массив для выбранных элементов
If element > 0 Then

'изменяем размер массива отобранных элементов
ReDim sel_num(element)

'это начальный номер отобранного элемента в массиве
i1 = 0

'идем по всему списку элементов
For i = 1 To UBound(all_text)
If all_num(i) = 1 Then
'если элемент отобран для выбора, то
'для каждого последующего отобранного элемента
'определяем его порядковый номер и номер из главного массива
i1 = i1 + 1
sel_num(i1) = i

'создаем новые элементы управления на основе уже существующих образцов
'у самих образцов номер индекса элементов равен 0

Load Form1.Label1(i1)
'задаем смещение вниз для каждого последующего элемента управления
Form1.Label1(i1).Top = 1080 + (i1 - 1) * 480
'включаем отображение его на форме
Form1.Label1(i1).Visible = True
'присваиваем значение элементу управления
Form1.Label1(i1).Caption = all_text(i)

'то же самое с текстом и кнопками
Load Form1.Text1(i1)
Form1.Text1(i1).Top = 1080 + (i1 - 1) * 480
Form1.Text1(i1).Visible = True
Form1.Text1(i1).Text = "0.00"
Load Form1.Command1(i1)
Form1.Command1(i1).Top = 1080 + (i1 - 1) * 480
Form1.Command1(i1).Visible = True
Load Form1.Command2(i1)
Form1.Command2(i1).Top = 1080 + (i1 - 1) * 480
Form1.Command2(i1).Visible = True

End If
Next

End If


End Sub


Public Sub menu()
'процедура формирования меню

i1 = 0
'очищаем меню
Form1.Combo1.Clear
For i = 1 To UBound(all_text)
If all_num(i) = 0 Then
'заполняем меню данными
Form1.Combo1.AddItem all_text(i)
i1 = i1 + 1
'сохраняем в массиве порядковый номер из главного списка
ReDim Preserve men_num(i1)
'присваиваем номер по порядку из основного массива для массива элементов меню
men_num(i1) = i
End If
Next

Form1.Combo1.Text = ""

End Sub

Private Sub Comm3_Click()
For i = 1 To UBound(all_text)
'убираем выделение для всех элементов основного массива
all_num(i) = 0
Next
'перерисовываем форму
Form1.Paint
Form1.menu
End Sub

Private Sub Command1_Click(Index As Integer)
i = MsgBox("Здесь нужно написать обработку выбора элемента", vbInformation + vbOKOnly, "Выбрана работа с отобранным элементом из списка")
End Sub

Private Sub Command2_Click(Index As Integer)
'убираем выделение указанного элемента
all_num(sel_num(Index)) = 0
'перерисовываем форму
Form1.Paint
Form1.menu
End Sub
Прикрепленные файлы:
4
Неизвестный
12.05.2010, 06:21
общий
Филатов Евгений Геннадьевич:
Спасибо за ответ, сегодня с ним ознакомлюсь
проще говоря с этой задачей справитья можно так
создать например 250 форм отличающихся между собой лишь количеством строк
В строке слева направо два флажка, поле в которое нужно загнать термин и кнопка
И в зависимости от количества терминов вдокументе, как их найти я знаю, выводить именно ту форму которая нужна с тем количеством строк
Вы же понимаете что это не серьёзно так делать
Кстати с радиокнопкой Вы не правильно поняли, я же указал флажки, то есть можно и купить и отложить просто я не удачно подобрал слова для примера
Но пока отвечать не нужно, после просмотра примера я ещё напишу
Неизвестный
12.05.2010, 15:28
общий
Ципихович Эндрю:
изложу Вам свое видение Вашего вопроса и его решения:
Можно сделать отдельную функцию, которая добавляет в форму нужные элементы. В качестве входных параметров ей передавать название формы, термин, который будет использоваться для текстового поля (собственно его можно использовать также и в названиях элементов, чтобы различать их между собой), порядковый номер и, думаю, отдельно еще название функции, которая будет срабатывать при нажатии на кнопку (либо все кнопки будут делать одно и то же, только с различными терминами). Далее открываем документ, в котором есть несколько терминов. При запуске формы выполняется код, который находит все термины и для каждого из них создает строку с элементами управления. т.е. получается что-то такое:
1. Открыть документ
2. Для каждого термина выполнить функцию "СозданиеЭлементов (имяФормы, Термин, Номер, названиеФункции)"

Функция "СозданиеЭлементов"
1. На форму "имяФормы" добавить следующие элементы
а) 2 чекбокса с известными названиями, шириной, высотой, положение от левого края, а положение сверху = какая-либо величина * Номер (чтобы сдвигать вниз с определенным шагом)
б) Текстовое поле с положением аналогично чекбоксам и текстом "Термин"
в) кнопка с положением как и чекбоксы и при нажатии на которую выполняется функция "названиеФункции".

Если так, то можно будет попробовать реализовать это в коде
Неизвестный
12.05.2010, 17:38
общий
Ципихович Эндрю:
Код:
Function CreateObject(Where As UserForm1, sTerm As String, iNum As Integer, sFunc As String) ' Where - это форма, на которую нужно добавить элементы, sTerm - термин, iNum - номер элемента, sFunc - Название функции
Dim n As Integer
With Where
' добавление Label
With .Controls.Add("Forms.Label.1", sTerm & "_L1")
.Caption = sTerm
.Left = 10
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
' добавление CheckBox
With .Controls.Add("Forms.CheckBox.1", sTerm & "_Ch1")
.Caption = "Купить"
.Left = 40
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
With .Controls.Add("Forms.CheckBox.1", sTerm & "_Ch2")
.Caption = "Отложить"
.Left = 70
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
' добавление CommandButton
With .Controls.Add("Forms.CommandButton.1", "CB" & iNum)
.Caption = "Выполнить"
.Top = 20 * iNum
.Height = 15
.Width = 20
.Left = 110
End With
' Обработчик нажатия кнопки
.Width = 200
.Height = 200
With ThisDocument.VBProject.VBComponents(.Name).CodeModule
n = .CountOfLines
.InsertLines n + 1, "Private Sub CB" & iNum & "_Click()"
.InsertLines n + 2, sFunc
.InsertLines n + 3, "Unload Me"
.InsertLines n + 4, "End Sub"
End With

End With
End Function

Sub RunForm()

Dim Arr As Variant
Dim i As Integer
Arr = Array("Золото", "Серебро", "Платина", "Лес", "Нефть")
For i = 0 To UBound(Arr)
CreateObject UserForm1, CStr(Arr(i)), i + 1, "MyFunc"
Next i
UserForm1.Show
End Sub

Sub MyFunc()
MsgBox$ "Работает"
End Sub


Правда не работает обработчик нажатия на кнопку, пока не знаю почему, и сама форма выглядит не очень. Выложил тут для того, чтобы посмотрели, оно ли это, плюс может еще кто чего предложит. Если будет ругаться на строки добавления кода, то добавьте в "Tools-References" Microsoft Visual Basic For Application Extensibility или закомментируйте эти строки. В принципе можно даже саму форму создавать из кода. В данном примере считается, что она уже существует.
Неизвестный
13.05.2010, 05:55
общий
Измалков Эдуард Леонидович:
Чтобы не ходить вокруг да около, я имею ввиду какую мне форму надо я сделал форму, выложил её, кстати, я ранее не экспортировал и не импортировал формы, подскажите, я экспортировал эту форму, получилось два файла
Экспертиза.frm
Экспертиза.frx
какой из них за что отвечает?, я так понял, чтобы затем обратно импортировать нужно ведь импортировать один из них?, какой?
Конечно я загнул насчёт 250 форм отличающихся между собой лишь количеством строк, так как это не реально, ну скажем в этой форме добавить ниже 10 строк можно, как? и конечно чтобы кнопки работали, у всех кнопок действие будет одно и то же. То есть посмотри в строке где находится кнопка установлен ли флажок 1 и 2 посмотри на введённые в лист бокс и два текстовых поля данные и исходя из увиденного сделай это ….
Файлы:
Экспертиза.frm
Файл Ekspertiza.frm успешно загружен.
Ссылка для скачивания
https://rfpro.ru/upload/2357
без пароля
без описания
Экспертиза.frx
Файл Ekspertiza.frx успешно загружен.
Ссылка для скачивания
https://rfpro.ru/upload/2358
без пароля
без описания
Неизвестный
13.05.2010, 05:57
общий
Филатов Евгений Геннадьевич:
Я написал в форуме для
Измалкова Эдуарда Леонидовича, я так понял оно и Вам интересно
Неизвестный
13.05.2010, 09:04
общий
Ципихович Эндрю:
frx - это внешний вид формы, frm - код. Поглядите мой пример, мне кажется это то, что вам и надо, только немного с другими полями. Для его работы создайте новую пустую форму с именем "UserForm1". Один обработчик не получится, либо в каждую кнопку забивать код, который будет привязан именно к тем элементам, значения которых он должен обрабатывать, либо создавать один обработчик с входными параметрами и при нажатии кнопки передавать ему значения обрабатываемых полей. И как я понял, сами термины не будут никак использоваться в форме, только их количество нужно
Неизвестный
13.05.2010, 09:49
общий
это ответ
Здравствуйте, Ципихович Эндрю.

"Повесить" обработчик события для runtime созданного элемента в MS Word, без использования VBProject, можно с помощью классов.
в прикрепленном файле:
класс DataRowCollection представляет собой коллекцию строк элементов на форме.
для создания строки используется метод Add
доступ к конкретной строке по свойству Item
при нажатии на кнопку строки возникает событие OnButtonClick

класс DataRow представляет собой одну строку элементов на форме. Создавать его отдельно - не нужно. только ч/з DataRowCollection.Add
доступ к значениям элементов, ч/з свойства DataRow

для использования нужно изменить метод DataRow.InitializeControls
в нем задются список состояний, ширина/высота элементов

и переопределить обработчик в модуле формы DataRows_OnButtonClick(DataRow As DataRow)
в нем делайте, то что Вам нужно по нажатию кнопки...
DataRow - та строка, на кнопку которой нажали...

ну и доделать что я там упустил...
Успехов.
Прикрепленные файлы:
4
Неизвестный
13.05.2010, 11:13
общий
Ципихович Эндрю:
https://rfpro.ru/upload/2361
попробуйте. Свою форму либо удалите, либо переименуйте. У меня форма и модуль класса.
Неизвестный
13.05.2010, 13:55
общий
это ответ
Здравствуйте, Ципихович Эндрю.
В целом мой ответ по принципу работы совпадает с предыдущем, разница в том, что класс используется только для обработки нажатия кнопки. Все остальные действия производятся при инициализации формы.
Во-первых, нужно создать пустую форму с названием "Экспертиза" и модуль класса "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 vTop 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.Controls.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) & "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
5
Неизвестный
13.05.2010, 18:07
общий
Измалков Эдуард Леонидович:
С внешним видом формы всё понятно, а вот код формы я так понимаю его надо загружать тоже но как? Я загрузил, но только вид то есть frx файл. Это я имею ввиду переноску своей формы с компьютера на крмпьтер а не то что Вы выложили, выложенное я ещё не смотрел.
Также спасибо за ответ. Ответов много, сообщений много по мере разбирательств может что спрошу.
Неизвестный
13.05.2010, 18:39
общий
Ципихович Эндрю:
при импорте в VBA предлагается только выбор *.frm файлов. В нем прописано название формы, и файл с формой (*.frx) должен находиться там же. VBA его найдет и загрузит сам, если же его не окажется, то просто получите ошибку. Также форма не загрузится, если в документе уже есть форма с таким названием, поэтому, если Вы хотите оставить старый вариант, его необходимо переименовать.
Неизвестный
16.05.2010, 09:16
общий
Измалков Эдуард Леонидович:

Спасибо за ответ. Видел там у Вас строку о том, что наибольшее количество строк которые можно добавить в строку - 100 пробовал ставить, чтобы появилось 102 строки – форму показало, правда посчитать строки невозможно экрана не хватает. Реально показать только 16 строк. Можно ли поставить условие, если требуется более 16 строк тогда сделать эту форму с прокруткой, чтобы поместилось больше строк???
Неизвестный
16.05.2010, 16:16
общий
Ципихович Эндрю:
https://rfpro.ru/upload/2404
Можно включить скроллбар на форме, но тогда при прокрутке заголовки тоже пропадут, поэтому сделал немного потруднее - добавил 2 фрейма, один с заголовками, другой для элементов и класс, обрабатывающий скроллбар.
Итого там 4 файла: 2 на форму и 2 класса.
Неизвестный
18.05.2010, 07:59
общий
Измалков Эдуард Леонидович:
Я ознакомился, спасибо за форму есть несколько вопросов
Вроде же там на форме не флажки, а радиокнопки, во всяком случае на форме нельзя поставить в одной строчке два флажка, где это меняется в коде чтобы были флажки??
Как изменить диаметр круга флажка???
Почему мигает движок когда трогаешь за скрол, как убрать???
Где в коде устанавливается размер шрифта в текстовом поле и лист боксе???

Там в коде Вы пишите:
' сюда еще нужно добавить строки добавления элементов
Это что например???
Где в коде добавить, чтобы в верху формы был заголовок, например переменная Заголовок_формы
Неизвестный
18.05.2010, 21:52
общий
Измалков Эдуард Леонидович:
Ответьте пожалуйста на последнее сообщение
Неизвестный
19.05.2010, 09:30
общий
Ципихович Эндрю:
https://rfpro.ru/upload/2444
1. В Вашем примере были радиокнопки, думал, что это принципиально так должно быть, поменял на флажки. Но флажки не круглые, а квадратные.
2. Как изменить размер флажка не нашел нигде.
3. Мигание скрола убрал. Везде пишут, что надо свойсто TabStop = False, но не помогло, поэтому сделал так, чтобы после перемещения фрейма фокус передавался от скролла верхней видимой кнопке.
4. Добавил возможность задания названия формы и все свойства текста текстовых полей и ComboBox
5. В ниспадающий список добавил элементы со значением по умолчанию.
Форма ответа