Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93

Вопросы по MDI-форме

12.12.2010, 08:34. Показов 3537. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первый вопрос: как в VB организовать панель окон в родительской форме, чтобы можно было перемещаться по дочерним окнам.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2010, 08:34
Ответы с готовыми решениями:

Отображение библиотечной формы в MDI форме
Привет. Как отбразить форму вызванную из библиотеки, так чтобы она была MDIChild и не поверх остальных окон? Заранее благодарен.

Позиционирование дочерней формы в MDI-форме
Почему-то дочерняя форма позиционируется по верхнему левому углу MDI-формы и ничего с этим не могу сделать... В чём трабл, не подскажете ?

Как позиционировать фоновый рисунок в MDI форме?
Есть такая программка WinRoute (и еще куча), где в главной (MDI) форме фоновый рисунок привязан к правому нижнему углу. Можно ли этого...

23
Сумрак
12.12.2010, 17:46
Стандарно... допустим меню - Окна, поставь галочку на WindowsList.
Будут отображаться заголовки открытых дочерних окон.
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
12.12.2010, 18:07  [ТС]
А так, чтобы выглядело стандартно - как во всех нормальных приложениях - то есть внизу панелька, на ней кнопарики.... Я просто думал, что меню можно делать только через Ctrl+E ...
0
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
21.12.2010, 19:02
Тот же вопрос - нужны кномпки внизу с названиями MDI-child'ов

Мысли по этому поводу:
1. Поискать готовый контрол
2. Помучить
Code
1
StatusBar
Буду с вниманием следить за темой.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
21.12.2010, 23:38
Чем плох toolbar?
0
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
22.12.2010, 11:09
Действительно, ToolBar лучше...
Попытаюсь сделать. Наверное, придется прописывать код на авто-resizing кнопочек
Хотелось бы, конечно, найти готовое. Задача-то довольно стандартная, не может быть, чтобы не было готового контрола.

= Один из принципов программирования - повторное использования кода (не изобретать велосипед) =
0
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
22.12.2010, 14:18
Нашел на vbAccelerator контрол MDITabs - типа как в Visual Studio закладки. Не совсем то, что хотелось.
Так что нарисую с ToolBar ом. Возникают попутные вопросы:
- Хотелось бы, чтоб обновление кнопок на ToolBar'e происходило по событию родителя (frmMDIParent) вроде
... Sub frmMDIParent_ChildLoaded().
Но такового, похоже не имеется. Вариант когда вызов идет по frmChild_Load() не проходит - пишет ошибку типа 'только одна MDI форма может жить' (ToolBar же в frmMDIParent).
Что-то запутался я. Как же можно форме frmMDIParent сообщить о том, что frmMDIChild загрузился и пора ToolBar обновлять?
0
Сумрак
22.12.2010, 14:20
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'Это так для примера. наидал побыстренькому
Option Explicit
 
Dim NN As Integer
 
Private Sub MDIForm_Load()
Dim i As Integer
Dim B As Button
TB.Align = 2
Dim myForm As New frmChild
For i = 1 To 10
NN = NN + 1
   myForm.Caption = NN & ' Ìîÿ íîâàÿ ôîðìà '
    Set B = TB.Buttons.Add(, , IIf(Len(myForm.Caption) > 5, Left(myForm.Caption, 5) & '...', myForm.Caption))
    B.ToolTipText = myForm.Caption
Next i
myForm.Show
End Sub
Сумрак
22.12.2010, 14:22
хехе.. Заголовок формы прикольный получился :-) Винду перекинул. а кодировку не отредактировал.
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
22.12.2010, 16:42
Если все child запускаются из главной формы, тогда понятно с этим
А как быть если один child другого вызывает непосредственно?

Вопрос: по какому событию менять состояние ToolBar'а (он ведь должен находиться в родительской форме?)
На вызов функции родительской формы из child'а VB пишет ошибку:
'Run-time error '426': Only one MDI form allowed'
Кстати, я не силён в теории - почему нельзя так делать, я же не пытаюсь еще одного MDIParent'а создать?
0
Сумрак
23.12.2010, 16:38
Как бы то нибыло Child вызывается кодом:
Dim myChild as new Child/ или через Set...
Load... show... можно без Load
Выход... сделать одну общую функцию, или процедуру. Которая создает myChild. И вызывать ее. А в параметре передать на основе чего создается новая форма. и в этой процедуре прописать код для кнопок. Ведь функционально код одинаковый для всех. только родитель меняется.
Сумрак
23.12.2010, 16:41
И не важно кто вызывает эту функцию. Главное чтоб родитель формы был Child.
Пусть myChild вызывает или MDI.
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
23.12.2010, 17:51
Сейчас проект у меня работает так:
MDI форма на которой менюшка с выбором, кого из child'ов первым грузить. Пользователь запускает child, на нем, как и на других, 'ссылки' на другие child'ы. При переходе к другому child'у первый вызывает функцию Start второго, в которой второй выполняет Me.Show. Функция Start вызывается с параметрами, у каждой формы они разные...
написал функцию в модуле:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Sub RebuildFormBar()
    
    Dim butOne As Button
    
    frmMDI.tbFormList.Buttons.Clear
    For Each Form In Forms
        Set butOne = frmMDI.tbFormList.Buttons.Add(Form.Name, , Form.Caption)
    Next
    
End Sub
(грубовато, конечно,ну это для примера)
она вызывается перед Start следующего child
вообще глюк какой-то: как только в этой функции дело доходит до ссылки на MDI-форму, строка
Visual Basic
1
    frmMDI.tbFormList.Buttons.Clear
функция завершается (без ошибки) и управление отдается обратно в ту функцию, где frmX.Start(....) идет следующей командой
кстати, ошибки на две MDI как было раньше, почему-то сегодня уже не кажет, хотя код я не менял
0
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
23.12.2010, 18:07
oops...
Ошибка есть, просто в опциях стояло 'Break on unhandled errors' вместо 'Break on all errors'
Текст и ситуация в которой она возникает - см. выше
0
Сумрак
24.12.2010, 02:22
Да... Дело в том что тебе надо еще контролировать эти формы. Т.е. нажал на кнопку фокус перешел на нужную форму. Если функция одна для всех. То NN=NN+1 и ложи NN в свойство Tag новой формы и Кнопки. И проверяй его при нажатии перебором. For Each...
Сумрак
24.12.2010, 11:45
А вообщето, я недопонимаю задания, то бишь зачем грузить MyChild из другого MyChild. Еслиб понимать что происходит .. тогда поточнее рекомендацию дал.
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
26.12.2010, 10:45
Ок.
Один child из другого я гружу для того, чтобы организовать следующую модель: (может можно и по другому, но на момент создания у меня не возникло мыслей о том, что такой способ чем-то неудобен)
- Программа представляет собой интерфейс базы данных (структура таблиц неизменна, надо только заносить/править/удалять данные)
- MDI - интерфейс
- Существует несколько 'основных' таблиц, несколько справочных, ну и связующие таблицы(возникают из связей M-to-N, некоторые с дополнительными полями).
- Каждая форма в проекте - интерфейс одной таблицы БД
- Для связи между ними и осуществления операций - переходы между формами сделаны с помощью вызовов функций Start с разными параметрами у каждой формы (параметры типа: таблица-sender, главный ID записи, тип выполняемой операции и т. д.)

такие дела...
0
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
26.12.2010, 10:49
Короче, хотел, чтобы получилось чт-то вроде 1С - там тоже везде работа с БД + функции обработки
И вроде получалось...
Тут вот застрял. Для соблюдения логики перехода между формами надо вводить некоторые ограничения. И список открытых внизу окон - почти единственный способ не дать пользователю запутаться...
0
Сумрак
27.12.2010, 12:02
Хех.. тогда просто Public функуцию, с параметром указывающим на нужную форму и вызывай ее из любого места кода. Тогда и Счетчик будет работать и контролировать можно созданые Чилды...
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 42
27.12.2010, 12:56
---Так и сделал. Усё работает!

Public функция - запускает любую форму, там же код для ToolBar'a, мне удалось стандартизировать запуск любой формы - использовал Optional параметры...

Последний вопрос: можно ли как-то без прописывания массива самому, получить список всех форм проекта (Forms содержит только загруженные.?)

Большие спасибы за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2010, 12:56
Помогаю со студенческими работами здесь

Возможно-ли отобразить Окно Internet Explorer на форме MDI?
Возможно-ли отобразить Окно Internet Explorer на форме MDI, если да, то как.

Как правильно управлять свёрнутым окном в MDI форме
Как правильно управлять свёрнытым окном в MDI форме. К примеру свернул окно в MDI форме, а двигать подчинённое(свёрнутое) окно могу....

Можно ли вместо однотонного фона в MDI форме поместить рисунок?
Можно ли вместо однотонного фона в MDI форме поместить рисунок?

Как в MDI форме фон сделать с плавным переходом цвета
Как в MDI форме фон сделать с плавным переходом цвета? Например в обычной форме я использую приведенный код ниже: Добавлено через 1...

Обращение к MDI форме
Всем привет! Вопрос такой: Есть MDI приложение, класс дочерней формы имеет родные и добавленные (в процессе разработки) свойства и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru