|
|
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Помагите, плиз. VBA вообще не знаю, тюею не знал до вчерашнего дня, а вот теперь приспичело. Знать всё равно не буду, но задачу как то решать надо. От того, может и глупый вопрос задам. Как на форме создать элемент (TextBox или ComboBox), VBA, Access XP, Windows XP. И ещё в одном месте причитал что у объектов(в статье говорилось про кнопки, но я так понял у многих кроме них) есть свойство index. А вот для кнопок которые у меня в Access я чего то такого свойства не нашёл, чего и где я не понял. Хотя это не так важно сейчас как первый вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 15:28 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
насчет ХП не знаю, в Аксесс97 это невозможно. есть какой то хитроумный метод "программно через конструктор", но это все равно не на лету.. Аксесс хорошо до поры до времени.. пока не нужна динамика в формах.юю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 16:06 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Да мне бы этот Access на фиг не пал, просто у меня шеф в нём какую то сваю базу вёл, а вот теперь ему захотелось что бы там всё это круто было и всё такое. Блин. и что бы именно в Access что бы ни каких файлов больше. Переубедить пока не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 16:17 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
вот что Биллиг пишет -------------------------- Формы 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 19:07 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
2 big-duke: Блин, спасибо большое. Пойду попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2004, 07:47 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Ещё раз для осбо далёких от этого мира. У меня есть форма, у неё есть Controls, у него (Controls) нет Add ? если имелось в виду, UserForm.Controls.add(?,?,?) то какие параметры надо ей передвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2004, 10:38 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Написал код ---------------------------- 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 --- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 15:00 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Vasill, о каких формах речь - о VB-шных, Access-овских, офисных (MSForms)? Они разные. Если (руководствуясь тематикой данного форума - VB) VB-шные, то продолжай копать результаты поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 15:13 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
БенедиктVasill, о каких формах речь - о VB-шных, Access-овских, офисных (MSForms)? Они разные. Если (руководствуясь тематикой данного форума - VB) VB-шные, то продолжай копать результаты поиска. о VB-шных: Visual Basic 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 08:05 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Повторю топик в из своей темы "Как создать 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 08:14 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Vasill, насчёт VB5 не скажу, какой-то он был промежуточный, я переходил с VB4 на VB6 сразу. В той теме, что ты создал, тебе дали ответ в виде результатов поиска. Всего 11 тем. Нужная информация применительно к VB6 там содержится. Я её повторю: Q190670. How To Dynamically Add Controls to a Form with Visual Basic 6.0 . Шарад в MSDN Library и Knowledge Base не припоминаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 11:06 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Это тоже не работает. Пока что делаю вывод, что версия не та (или копия не та :) ). Нужно устанавливать VB 6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 14:55 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Попробовал всё же приспособить пример со странички Майкрософта к ВБ5 Убрал всё кроме TextBox Увы.... 1) VBControlExtender не распознаётся 2) Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1) "... method doesn't support" Мдаа-а, "казачок"-то видимо не тот.... ___________________ Истина где-то рядом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 15:16 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
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) и т.д.) Понятно, что в этом примере установлены не все параметры (нет цвета, шрифта и многих других). Ну, это уже исходя из потребностей программиста. Аналогично можно заполнить ворму всем чем угодно, достаточно разместить на форме "каждой твари по паре", причём второй объект в каждой паре в начале проектирования уничтожается за ненадобностью. _______________________________ Истина где-то рядом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 08:46 |
|
||
|
Как в run-time создать чего-нибудь на форме???
|
|||
|---|---|---|---|
|
#18+
Извините, в предыдущем посте не весь текст скопировал в окно --------------------------------------- Эврика! Нашёл решение. Исходя из своей первоначальной задачи. А задача была такая: создать таблицу из 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) и т.д.) Понятно, что в этом примере установлены не все параметры (нет цвета, шрифта и многих других). Ну, это уже исходя из потребностей программиста. Аналогично можно заполнить ворму всем чем угодно, достаточно разместить на форме "каждой твари по паре", причём второй объект в каждой паре в начале проектирования уничтожается за ненадобностью. _____________________ Истина где-то рядом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 08:47 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34738807&tid=2163540]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 504ms |

| 0 / 0 |
