powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в run-time создать чего-нибудь на форме???
15 сообщений из 15, страница 1 из 1
Как в run-time создать чего-нибудь на форме???
    #32589672
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помагите, плиз. VBA вообще не знаю, тюею не знал до вчерашнего дня, а вот теперь приспичело. Знать всё равно не буду, но задачу как то решать надо. От того, может и глупый вопрос задам. Как на форме создать элемент (TextBox или ComboBox),
VBA, Access XP, Windows XP.
И ещё в одном месте причитал что у объектов(в статье говорилось про кнопки, но я так понял у многих кроме них) есть свойство index. А вот для кнопок которые у меня в Access я чего то такого свойства не нашёл, чего и где я не понял. Хотя это не так важно сейчас как первый вопрос.
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #32589769
Jenek111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насчет ХП не знаю, в Аксесс97 это невозможно. есть какой то хитроумный метод "программно через конструктор", но это все равно не на лету.. Аксесс хорошо до поры до времени.. пока не нужна динамика в формах.юю
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #32589789
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да мне бы этот Access на фиг не пал, просто у меня шеф в нём какую то сваю базу вёл, а вот теперь ему захотелось что бы там всё это круто было и всё такое. Блин. и что бы именно в Access что бы ни каких файлов больше. Переубедить пока не получилось
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #32590143
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что Биллиг пишет
--------------------------
Формы Office 2000 обладает новым важным булевым свойством Show Modal, значение которого можно установить в момент проектирования. Если это значение равно True, то окно формы является модальным и его нельзя покинуть до закрытия. Если значение — False, то можно покинуть форму, поработать с документом, понажимать, например, другие кнопки в документе, модифицируя, возможно, саму форму. Замечу, что в Office 97 создать немодальное окно можно было только, используя объекты Balloon, входящие в состав объекта Assistant. Теперь сделан важный шаг в правильном направлении — центральный объект интерфейса UserForm получил возможность работать в немодальном окне. Главное, что от программиста это не требует никаких усилий, достаточно изменить значение одного свойства. Замечу, что в С + +, по крайней мере, в версии 4 работа с немодальными окнами требовала профессиональных знаний, в частности, умения посылать сообщения операционной системе. Но вернемся к нашей задаче.
В период выполнения программы элементы управления достаточно просто программным путем вставляются в форму, и я об этом рассказывал в главах, посвященных проектированию интерфейса. У объекта Form есть коллекция Controls, у которой имеется метод Add, позволяющий добавить любой из элементов управления. В моем примере примере я уже спроектировали форму с двумя элементами управления — командной кнопкой и окном редактирования. В обработчиках события Click командной кнопки самой формы и командной кнопки «Add Controls to Form», встроенной в тестовый документ, вызывается процедура AddControls, которая добавляет в форму еще пару таких же элементов управления. Заметьте, поскольку моя форма не является модальной, то щелкать командные кнопки можно как в самой форме, так и вне формы. Вот текст процедуры, добавляющей в форму элементы управления:
Public Sub AddControlsO
'Эта процедура добавляет командную кнопку и окно редактирования в форму With UserForml
'Добавляем окно редактирования
Set Mycmd = .Controls.AddC'Forms.TextBox.1", "ProgramBox", True)
Mycmd.Left = .TextBoxl.Left
Mycmd.Top = .TextBoxl.Top + 100
Mycmd.Width = .TextBoxl.Width
Mycmd.Height = .TextBoxl.Height
Mycmd.Text = "New Control - " & Mycmd.Name
'Добавляем командную кнопку
Set Mycmd = .Controls.AddC'Forms.CommandButton.1", "ProgramButton", True)
Mycmd.Left = .CommandButtonl.Left
Mycmd.Top = .CommandButtonl.Top + 100
Mycmd.Width = .CommandButtonl.Width
Mycmd.Height = .CommandButtonl.Height
Mycmd.Caption = "ProgramButton"
End With End Sub
„ ее обработок вызвал процедур,
AddControls
Рис. П.З Форма с программно добавленными элементами управления
ГИи. 11.0 4'wpniK - --Г--Г
Добавленные таким путем элементы управления живут в форме только до ее закрытия. Но, заметьте, если скрыть форму, вызвав метод Hide, то при повторном ее открытии элементы управления сохраняются Перейдем теперь непосредственно к ответу на первый поставленный вопрос. Для его решения потребуются средства, ранее не упоминавшиеся в книге. Нам понадобятся объекты класса VBComponent — компоненты VB-проекта (объекта класса VBProject). Для работы с ними необходимо включить дополнительную ссылку на библиотеку VBIDE (Visual Basic Extensibility) А теперь отвечаю конкретно на первый поставленный вопрос. Можно программно добавить элементы управления так, чтобы они сохранялись в форме точно так же, как сохраняются элементы, созданные в период проектирования Для этого нужно работать с объектом, представляющим форму в режиме проектирования, используя свойство Designer объекта VBComponent. Вот как это делается
Public Sub AddDesignControlsO
'Эта процедура добавляет командную кнопку и окно редактирования в форму
Dim MyForm As UserForm
'Создаем форму этапа проектирования
Set MyForm = ActiveDocument.VBProject.VBComponents("UserForm1").Designer With MyForm
'Добавляем окно редактирования
Set Mycmd = Controls Add( Forms TextBox.1", "ProgramBox", True)
Mycmd Left = TextBoxl Left
Mycmd Top = TextBoxl Top +100
Mycmd.Width = TextBoxl Width '.
Mycmd Height = TextBoxl Height
Mycmd.Text = "New Control - " & Mycmd Name
'Добавляем командную кнопку
Set Mycmd = Controls Add("Forms CommandButton.1", "ProgramButton', True)
Mycmd.Left = .CommandButtonl.Left Mycmd.Top = .CommandButtonl.Top + 100 Hycmd.Width = .CommandButtonl.Width Mycmd Height = CommandButtonl.Height Mycmd.Caption = "DesignButton"
End With
'Удаляем командную кнопку, вызывающую эту процедуру
'Эта кнопка может работать лишь раз, по крайней мере,
'пока в режиме проектирования не будут удалены добавленные элементы
'Заметьте, кнопку можно только удалить, но нельзя сделать ее невидимой.
ActiveDocument.InlineShapes(4).Delete End Sub
Обратите внимание, к моей форме, рассматриваемой как объект класса VBComponent, я добираюсь через свойство VBProject нашего документа. Имея форму, в последний момент вызываю Designer, который и возвращает форму периода проектирования. Теперь добавление элементов управления будет постоянным. Само добавление делается, как и ранее, никаких изменений в этом процессе здесь нет.
Однако ость некоторые естественные ограничения, на которые следует обратить внимание. Процедура AddDesignControls, добавляющая элементы периода проектирования, должна вызываться при закрытой форме и только один раз. Поэтому в конце этой процедуры добавлен текст, удаляющий из тестового документа командную кнопку (объект класса InlmeShape), обработчик которой вызывал процедуру AddDesignControls.
Вот как выглядит форма, открытая после окончания работы этой процедуры:
-----------------------------------------------------
Пардон за качество - сканировал fine reader
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #32590448
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 big-duke:
Блин, спасибо большое. Пойду попробую.
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #32590692
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё раз для осбо далёких от этого мира.
У меня есть форма, у неё есть Controls, у него (Controls) нет Add ?
если имелось в виду, UserForm.Controls.add(?,?,?) то какие параметры надо ей передвать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как в run-time создать чего-нибудь на форме???
    #34738807
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал код

----------------------------
Public Sub AddControls()
With Form1
Set Mycmd = Form1.Controls.Add ("Forms.TextBox1", "ProgramBox", True)
Mycmd.Left = .TextBox1.Left
Mycmd.Top = .TextBox1.Top + 100
Mycmd.Width = .TextBox1.Width
Mycmd.Height = .TextBox1.Height
Mycmd.Text = "New Control - " & Mycmd.Name
End With
End Sub
----------------------------

НЕ РАБОТАЕТ!! WHY???

Показывает ошибку:
---
Object doesn't suppot this propety or method

---
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34738890
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vasill,
о каких формах речь - о VB-шных, Access-овских, офисных (MSForms)? Они разные.
Если (руководствуясь тематикой данного форума - VB) VB-шные, то продолжай копать результаты поиска.
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34740476
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктVasill,
о каких формах речь - о VB-шных, Access-овских, офисных (MSForms)? Они разные.
Если (руководствуясь тематикой данного форума - VB) VB-шные, то продолжай копать результаты поиска.

о VB-шных: Visual Basic 5
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34740481
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Повторю топик в из своей темы "Как создать TextBox?"

VasillХочу создать TextBox. Всё делал по хелпу VB5.
Но не работает? Почему?
Появляется сообщение "Object required"


Вот мой код

Public Sub Form_Load()
Dim Text1
Dim objText As TextBox
Set objText = Text1
objText.Text = "HELLO!"
End Sub


А вот текст из хелпа Бэйсика, статья "Creating Objects"

Similarly, you can declare an object variable that can refer to any text box in your application:
Dim anyText As TextBox ' Can refer to any text box
' (but only a text box).

You can also declare an object variable that can refer to a control of any type:
Dim anyControl As Control ' Generic control variable.

Notice that you can declare a form variable that refers to a specific form in the application, but you cannot declare a control variable that refers to a particular control. You can declare a control variable that can refer to a specific type of control (such as TextBox or ListBox), but not to one particular control of that type (such as txtEntry or List1). However, you can assign a particular control to a variable of that type. For example, for a form with a list box called lstSample, you could write:
Dim objDemo As ListBox
Set objDemo = lstSample




Что то у меня нарыть не получается. Как о стену. Всё что-то не срастается.

Появляются грустные философские мысли: а что это за Бэйсик-то такой? Ведь первоначально это был язык для начинающих. И сейчас если пользоваться визуальным интерфейсом кажется просто... но до тех пор пока не перейдёшь к текстовому программированию. И почему? Каким должен быть язык? Простым и удобным, интуитивно понятным, чтобы не париться? Или программист должен быть разгадывателем шарад, составленых авторами? Наверное в этом-то и весь смак, по замыслу майкрософтовцев.... Sorry
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34740880
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vasill,
насчёт VB5 не скажу, какой-то он был промежуточный, я переходил с VB4 на VB6 сразу.

В той теме, что ты создал, тебе дали ответ в виде результатов поиска. Всего 11 тем. Нужная информация применительно к VB6 там содержится. Я её повторю: Q190670. How To Dynamically Add Controls to a Form with Visual Basic 6.0 .

Шарад в MSDN Library и Knowledge Base не припоминаю.
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34741925
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это тоже не работает.

Пока что делаю вывод, что версия не та (или копия не та :) ). Нужно устанавливать VB 6
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34742000
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал всё же приспособить пример со странички Майкрософта к ВБ5

Убрал всё кроме TextBox

Увы....

1) VBControlExtender не распознаётся

2) Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)

"... method doesn't support"


Мдаа-а, "казачок"-то видимо не тот....

___________________
Истина где-то рядом?
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34746371
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Text1(1) - уничтожаем за ненадобностью и остаётся ОДИН элемент ГРУППЫ: Text(0)

Затем в форму вставляем следующий код.

Private Sub Form_Load()
Dim i As Integer, j As Integer
Dim itop As Integer, itop_ As Integer
Dim ileft As Integer, ileft_ As Integer
Dim iheight_ As Integer
Dim iwidth_ As Integer
Dim dh As Integer, dw As Integer
Dim Index As Integer, ColCnt As Integer, RowCnt As Integer
ColCnt = 5
RowCnt = 14
itop_ = 40
ileft_ = 40
iheight_ = 300
iwidth_ = 1400
dh = 30
dw = 30

Index = 0
For i = 0 To ColCnt - 1
For j = 0 To RowCnt - 1
If Index > 0 Then
Load Text1(Index)
End If
Text1(Index).Height = iheight_
Text1(Index).Width = iwidth_
itop = itop_ + j * (iheight_ + dh)
Text1(Index).Top = itop
ileft = ileft_ + i * (iwidth_ + dw)
Text1(Index).Left = ileft
Text1(Index).Visible = True
Index = Index + 1
Next
Next

End Sub

Последующие ТестБоксы создаются методом Load
(TextBox(1), TextBox(2), TextBox(3) и т.д.)

Понятно, что в этом примере установлены не все параметры (нет цвета, шрифта и многих других).
Ну, это уже исходя из потребностей программиста.

Аналогично можно заполнить ворму всем чем угодно, достаточно разместить на форме
"каждой твари по паре", причём второй объект в каждой паре в начале проектирования уничтожается за ненадобностью.
_______________________________
Истина где-то рядом?
...
Рейтинг: 0 / 0
Как в run-time создать чего-нибудь на форме???
    #34746373
Vasill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, в предыдущем посте не весь текст скопировал в окно

---------------------------------------


Эврика!

Нашёл решение. Исходя из своей первоначальной задачи.
А задача была такая: создать таблицу из ColCnt столбцов и RowCnt строк из объектов
TextBox.

Изначально в задаче не было условия, что на форме не должно быть НИ ОДНОГО объекта.

Поэтому на самом деле задача просто и очень надёжно (как для ВБ5, так и бл* ВБ6) решается вот как.
Превоначально с помощью визуального интрфейса размещаем на форме ОДИН первоначальный объект с произвольными параметрами.

Затем, опять же средствами виз.программирования, создаём групу из двух элементов
Text1(0)
Text1(1)

Text1(1) - уничтожаем за ненадобностью и остаётся ОДИН элемент ГРУППЫ: Text(0)

Затем в форму вставляем следующий код.

Private Sub Form_Load()
Dim i As Integer, j As Integer
Dim itop As Integer, itop_ As Integer
Dim ileft As Integer, ileft_ As Integer
Dim iheight_ As Integer
Dim iwidth_ As Integer
Dim dh As Integer, dw As Integer
Dim Index As Integer, ColCnt As Integer, RowCnt As Integer
ColCnt = 5
RowCnt = 14
itop_ = 40
ileft_ = 40
iheight_ = 300
iwidth_ = 1400
dh = 30
dw = 30

Index = 0
For i = 0 To ColCnt - 1
For j = 0 To RowCnt - 1
If Index > 0 Then
Load Text1(Index)
End If
Text1(Index).Height = iheight_
Text1(Index).Width = iwidth_
itop = itop_ + j * (iheight_ + dh)
Text1(Index).Top = itop
ileft = ileft_ + i * (iwidth_ + dw)
Text1(Index).Left = ileft
Text1(Index).Visible = True
Index = Index + 1
Next
Next

End Sub

Последующие ТестБоксы создаются методом Load
(TextBox(1), TextBox(2), TextBox(3) и т.д.)

Понятно, что в этом примере установлены не все параметры (нет цвета, шрифта и многих других).
Ну, это уже исходя из потребностей программиста.

Аналогично можно заполнить ворму всем чем угодно, достаточно разместить на форме
"каждой твари по паре", причём второй объект в каждой паре в начале проектирования уничтожается за ненадобностью.






_____________________
Истина где-то рядом?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в run-time создать чего-нибудь на форме???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]