powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли наследовать форму
22 сообщений из 22, страница 1 из 1
Можно ли наследовать форму
    #32235189
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например несколько форм имеют несколько стандартных контролов
и выглядят почти одинаково.
Можно ли сделать форму с общими для них свойствами , оформить ее как класс,
и рисование остальных начинать не с копирования , а с наследования этих свойств.
соответственно если что-то меняется в основной форме , остальные получают
измененные свойства автоматически, как это происходит на других платформах.

раньше не задумываясь копировал, но теперь когда таких форм набралось больше пяти,слишком много лишней работы.
Есть ли способ ? Или лучше плюнуть и переписать на C#.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235230
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не со всем понятно...
а почему не использовать Dim frm as New Form_ИмяФормы ?
А затем задавать нужные свойства (в том числе //лучше// через модуль-класса)
==
только останется решить проблему с закрытием формы - имя то у всех форм одно :(
У Гетца есть решение этой проблемы. Не помню как :( если надо выужу
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235235
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли вслух:
1) использовать форм со стандартными элементами как подформу, отличия на самой форме
2) сделать форму со стандартными элементами и избыточным количеством дополнительных. написать процедуру "настройки" дополнительных элементов
3) использовать повторное открытие формы (как предложил Виктор)
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235252
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай форму. Предусмотри у нее кучу пропертей/методов для ее настройки и вообще взаимодействия с внешним миром. А дальше открывай ее как Виктор посоветовал, или используй в качестве подформы (как incold посоветовал). Этакий актив икс в миниатюре.

Или переходи на дотнет. Там можно форму наследовать.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235267
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я однажды так и делать начал. Для форм-журналов: самое что ни на есть похожие формы, отличаються только заголовками да источником. А потом заказчик разошелся - давай, говорит, сделаем здесь это, а тут это, а там - то-то, а в той цветом, а в этой шрифтом, а эта пусть не закрывается пока..., ... Прикинул - вся универсальность - коту под хвост, а делать "наследования" не стал - хотя для части форм он прекрасно бы прокатило - оставил метод "научного копирования на базе модуля-класса" :)
Хотя идея "наследования" еще во мне не умерла: заманчиво - одна форма равна половине интерфейса программы.
Эх-хе, лень-старушка... :)
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235276
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторное открытие это змечательно.
>А затем задавать нужные свойст
но как потом на основе этой повторно открытой формы,
сделать свою слегка отличающуюся (желательно через конструктор).
Или придется в ручную свойства изменять?

Типа есть шаблонная форма.
Я создаю новую указав шаблон.
Получается такая-же и я к ней добавляю еще один контрол.
При этом если в будущем шаблон изменится,
формы сделанные по нему должны изменится автоматически.


Чтобы появилась Form_ИмяФормы2
Которая была бы наследником Form_ИмяФормы1
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235290
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>только останется решить проблему с закрытием формы
Как раз это достаточно просто.
форма существует , пока есть хоть одна ссылка на нее.
Обычно делается глобальная коллекция алтернативная коллекции Forms

При открытии добавляеш в нее ссылку.
на закрытие формы ссылка из коллекции удаляется.
можно еще сделать ссылку внутри формы на саму себя.
это проще но не всегда удобно.

Давно хочу отказатся от DoCmd чтобы сделать истинно многооконный интерфейс.
Только вот текучка заела.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235296
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk
Нет в аксесе наследования (в классическом понимании). Наследование реализации в VB сделать нельзя. Можно только влючить объект "родительского" класса в "дочерний" и к нему переправлять вызовы всех методов. Для форм близкое понятие - подформы.

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

Но все это - из серии "на безрыбье сам раком встанешь"
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235309
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Предусмотри у нее кучу пропертей/методов для ее настройки и вообще взаимодействия с внешним миром
Так это монстр получится , в котором потом хрен разберешся.

Как то ведь Access создает объекты с помощью конструктора на основе стандартного объекта "Form" Как бы его обмануть , чтобы он тоже самое делал , но на основе моего уже модифицированного объекта "Form_МояФорма".
Интуитивно кажется , что как то можно.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235314
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп. Тебе нужно чтобы изменений были видны во вновь создаваемых формах? Или в уже существующих?
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235321
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если для новых, то
Код: plaintext
Access.Application.CreateForm ([Database], [FormTemplate]) As Form
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235326
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Latuk

Не буду рассматривать идею с подчиненой формой (хотя она более чем достояна внимания) отвечу по New Form_..

>но как потом на основе этой повторно открытой формы,
>сделать свою слегка отличающуюся (желательно через конструктор).
>Или придется в ручную свойства изменять?

Нет так не получиться. Form_Name будет всегда одна. В ней должно быть реализовано все то множество отличий которые ты хочешь видеть в "других" формах. На основе главной (шаблон) Form_Name ты будешь создовать "временные" формы, которые через заданные тобой свойства/методы будет чем-то отличаться от главной, например, путем задание Visible=true некоторым контролам. А ручками прийдется набивать значение свойств/методов для "временной" (новой) формы.

>Чтобы появилась Form_ИмяФормы2
>Которая была бы наследником Form_ИмяФормы1

Ну про наследование ЛП уде сказал :)
В принципе Form_ИмяФормы2 появиться - временно - и будет копией Form_ИмяФормы1. Просто как будто ты создал новый экземпляр класса.
Причем нельзя будет сделать Dim frm3 as New Form_ИмяФормы2

Фу, наверное понятно объяснил :)
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235334
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Latuk
>Так это монстр получится , в котором потом хрен разберешся

Я уже про это писал :) пришлось отказать. Но можно пойти другим путем, например, как Нуф-Нуф, который старательно подбирает название свойств/методов. Самодокументирует :)


>Access.Application.CreateForm ([Database], [FormTemplate]) As Form

Только в mde/ade работать данная конструкия не будет. Только mdb/adp
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235358
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин ну вы даете из Access хотите сделать монстра (как это уже упоминалось)!
Я думаю проще создать на VB(Delphi) OCX - компонет, какой тебе нужно и потом его использовать его в Access, так же в последствии, его модифицировать. Мне это очень помогло, когда нужно было использовать нестандартные компонеты. Если начинаешь новый проект, то лучше используй Delphi и не парся чем зря!
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235375
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать ActiveX контрол - это конечно хорошо. Но геморойно будет это поддерживать.
С другой стороны, форма аксеса - тоже ActiveX контрол . С ограничениями конечно.

В моей практике было такое. Были некие примитивы, состоящие из двух-трех-четырех конролов, которые должны были примерно похоже выглядеть и примерно похоже себя вести. Из этих примитивов собирались более крупные образования, которые, в свою очередь, использовались как примитивы более высокого уровня.
Ну и нарисовал я подформочек, прописал им ресайз мудрый, сделал нужных пропертей, инкапсулировал в них всю примитивную работу с примитивами (тьфу масло масленное). Внедрил эти подформочки в другие. В них сделал то же самое.
И работало хорошо, и написалось быстро.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235385
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>И работало хорошо, и написалось быстро.

... и наступил 7 день
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235396
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
) Лох
То что ты сделал это конечно же хорошо, но с точки распространения это плохо - разовая работа для Access. А я свои контролы могу использовать везде, где захочу (например, есть контрол с Grid-м у которого функциональность в 10 раз лучше, чем форма-таблица Access.) Вот такие дела ......
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235412
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Access.Application.CreateForm ([Database], [FormTemplate]) As Form
Это уже интересно.
А если сделать так (раз уж нельзя чтом все само):
Создаю форму на основе шаблона
Access.Application.CreateForm ([Database], [FormTemplate]) As Form
Каким-то образом помечаю,что она наследница шаблона(например начало названия такое же как у шаблона)
Потом через конструктор правлю ее.
Естественно с ограничениями типа :
Не изменять унаследованные контролы,а только добавлять новые.

На случай когда изменяется шаблон, пишу некий код, который:
Создает на основе шаблона новую форму
Ищет наследницу
добавляет в вновь созданную форму все отличия наследницы от шаблона.
(как с текстом модуля работать знаю , наверное можно и контролы програмно добавлять)
Переименовывает наследницу , а новой форме дает ее имя.
Ищем следующую наследницу
....
Ищем наследниц второго уровня
....

Таким образом изменения шаблона транслируются в другие формы.
Этакая макроподстановка.
Может кто пробывал?
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235416
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Amel
Ну давай не будем рассуждать - что такое хорошо, что такое плохо.
Мне НЕ нужен был универсальный контрол. Требуемый контрол имел смысл только в рамках одного проекта. Причем был очень тесно завязан в внутренней логикой работы. Которая тоже была в процессе разработки, и могла на ходу меняться. Любое изменение логики - изменение визуальных контролов.
Исходя из таких предпосылок - на фиг мне внешний ActiveX? Мне лучше встроенных/родных аксесовских форм ничего и не придумать.

А разработкой универсальных чудо-бубнов я давно не занимаюсь. Если бы надо было написать супер-пупер грид - очевидно что не на аксесе
Но я бы и писать его наверное не стал. Их в сети валяется вагон и маленькая тележка. Даже начальство с полпинка можно раскрутить на покупку лицензионных копий.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235426
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)) Лох
А что злится то сразу а??? То что ты сделал для одного проекта, как ты уже и сказал, а если есть много проектов а? Тогда же что делать??? И тем более OCX меньше места занимает, чем формы в md*.*. ...........
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235436
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk
как с текстом модуля работать знаю , наверное можно и контролы програмно добавлять
CreateControl

Идея может быть и хорошая, но я не пробовал, да и не буду. Страшно :)
Работать оно будет, но (имхо) 50% времени будет уходить на подгонку этого чудо-визарда под какие-то непредусмотренные действия программиста.
Если все так серьезно - может действительно в сторону дотнета пристальный взгляд обратить?

2 Amel
А я и не злюсь. Просто пояснил.
Много проектов - проимпортировать формочки. А уж места они занимают - экспортни модуль класса в txt и погляди.
Или вообще - сделай одну библиотечную базку, подцепляй ее через ссылки.
Если надо ActiveX - ну значит надо. На разработку хорошего (действительно универсального) контрола времени уходит порядочно, потому и не использую. Кому шашечки, а кому и ехать надо.
...
Рейтинг: 0 / 0
Можно ли наследовать форму
    #32235531
somebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На C# это просто решается.
А Access просто не совсем для этого предназначен. Только хуже сделаете... Усложните настолько, что потом вообще никто не разберется...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли наследовать форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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