|
|
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Например несколько форм имеют несколько стандартных контролов и выглядят почти одинаково. Можно ли сделать форму с общими для них свойствами , оформить ее как класс, и рисование остальных начинать не с копирования , а с наследования этих свойств. соответственно если что-то меняется в основной форме , остальные получают измененные свойства автоматически, как это происходит на других платформах. раньше не задумываясь копировал, но теперь когда таких форм набралось больше пяти,слишком много лишней работы. Есть ли способ ? Или лучше плюнуть и переписать на C#. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 12:20 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Что-то не со всем понятно... а почему не использовать Dim frm as New Form_ИмяФормы ? А затем задавать нужные свойства (в том числе //лучше// через модуль-класса) == только останется решить проблему с закрытием формы - имя то у всех форм одно :( У Гетца есть решение этой проблемы. Не помню как :( если надо выужу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 12:41 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Мысли вслух: 1) использовать форм со стандартными элементами как подформу, отличия на самой форме 2) сделать форму со стандартными элементами и избыточным количеством дополнительных. написать процедуру "настройки" дополнительных элементов 3) использовать повторное открытие формы (как предложил Виктор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 12:45 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Сделай форму. Предусмотри у нее кучу пропертей/методов для ее настройки и вообще взаимодействия с внешним миром. А дальше открывай ее как Виктор посоветовал, или используй в качестве подформы (как incold посоветовал). Этакий актив икс в миниатюре. Или переходи на дотнет. Там можно форму наследовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 12:55 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Я однажды так и делать начал. Для форм-журналов: самое что ни на есть похожие формы, отличаються только заголовками да источником. А потом заказчик разошелся - давай, говорит, сделаем здесь это, а тут это, а там - то-то, а в той цветом, а в этой шрифтом, а эта пусть не закрывается пока..., ... Прикинул - вся универсальность - коту под хвост, а делать "наследования" не стал - хотя для части форм он прекрасно бы прокатило - оставил метод "научного копирования на базе модуля-класса" :) Хотя идея "наследования" еще во мне не умерла: заманчиво - одна форма равна половине интерфейса программы. Эх-хе, лень-старушка... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:04 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Повторное открытие это змечательно. >А затем задавать нужные свойст но как потом на основе этой повторно открытой формы, сделать свою слегка отличающуюся (желательно через конструктор). Или придется в ручную свойства изменять? Типа есть шаблонная форма. Я создаю новую указав шаблон. Получается такая-же и я к ней добавляю еще один контрол. При этом если в будущем шаблон изменится, формы сделанные по нему должны изменится автоматически. Чтобы появилась Form_ИмяФормы2 Которая была бы наследником Form_ИмяФормы1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:09 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
>только останется решить проблему с закрытием формы Как раз это достаточно просто. форма существует , пока есть хоть одна ссылка на нее. Обычно делается глобальная коллекция алтернативная коллекции Forms При открытии добавляеш в нее ссылку. на закрытие формы ссылка из коллекции удаляется. можно еще сделать ссылку внутри формы на саму себя. это проще но не всегда удобно. Давно хочу отказатся от DoCmd чтобы сделать истинно многооконный интерфейс. Только вот текучка заела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:19 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
2 Latuk Нет в аксесе наследования (в классическом понимании). Наследование реализации в VB сделать нельзя. Можно только влючить объект "родительского" класса в "дочерний" и к нему переправлять вызовы всех методов. Для форм близкое понятие - подформы. Используй одну форму как подформу в других. Изменения в ней автоматом будут видны везде где она используется. Если нужны таки отличия - делай их либо через настройку (публичные пропертя и методы подформы), либо запихни отличия в родительскую форму. Но все это - из серии "на безрыбье сам раком встанешь" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:21 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
>Предусмотри у нее кучу пропертей/методов для ее настройки и вообще взаимодействия с внешним миром Так это монстр получится , в котором потом хрен разберешся. Как то ведь Access создает объекты с помощью конструктора на основе стандартного объекта "Form" Как бы его обмануть , чтобы он тоже самое делал , но на основе моего уже модифицированного объекта "Form_МояФорма". Интуитивно кажется , что как то можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:27 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Стоп. Тебе нужно чтобы изменений были видны во вновь создаваемых формах? Или в уже существующих? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:30 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Если для новых, то Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:33 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
2Latuk Не буду рассматривать идею с подчиненой формой (хотя она более чем достояна внимания) отвечу по New Form_.. >но как потом на основе этой повторно открытой формы, >сделать свою слегка отличающуюся (желательно через конструктор). >Или придется в ручную свойства изменять? Нет так не получиться. Form_Name будет всегда одна. В ней должно быть реализовано все то множество отличий которые ты хочешь видеть в "других" формах. На основе главной (шаблон) Form_Name ты будешь создовать "временные" формы, которые через заданные тобой свойства/методы будет чем-то отличаться от главной, например, путем задание Visible=true некоторым контролам. А ручками прийдется набивать значение свойств/методов для "временной" (новой) формы. >Чтобы появилась Form_ИмяФормы2 >Которая была бы наследником Form_ИмяФормы1 Ну про наследование ЛП уде сказал :) В принципе Form_ИмяФормы2 появиться - временно - и будет копией Form_ИмяФормы1. Просто как будто ты создал новый экземпляр класса. Причем нельзя будет сделать Dim frm3 as New Form_ИмяФормы2 Фу, наверное понятно объяснил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:34 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
2Latuk >Так это монстр получится , в котором потом хрен разберешся Я уже про это писал :) пришлось отказать. Но можно пойти другим путем, например, как Нуф-Нуф, который старательно подбирает название свойств/методов. Самодокументирует :) >Access.Application.CreateForm ([Database], [FormTemplate]) As Form Только в mde/ade работать данная конструкия не будет. Только mdb/adp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:42 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Блин ну вы даете из Access хотите сделать монстра (как это уже упоминалось)! Я думаю проще создать на VB(Delphi) OCX - компонет, какой тебе нужно и потом его использовать его в Access, так же в последствии, его модифицировать. Мне это очень помогло, когда нужно было использовать нестандартные компонеты. Если начинаешь новый проект, то лучше используй Delphi и не парся чем зря! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:55 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
Написать ActiveX контрол - это конечно хорошо. Но геморойно будет это поддерживать. С другой стороны, форма аксеса - тоже ActiveX контрол . С ограничениями конечно. В моей практике было такое. Были некие примитивы, состоящие из двух-трех-четырех конролов, которые должны были примерно похоже выглядеть и примерно похоже себя вести. Из этих примитивов собирались более крупные образования, которые, в свою очередь, использовались как примитивы более высокого уровня. Ну и нарисовал я подформочек, прописал им ресайз мудрый, сделал нужных пропертей, инкапсулировал в них всю примитивную работу с примитивами (тьфу масло масленное). Внедрил эти подформочки в другие. В них сделал то же самое. И работало хорошо, и написалось быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:06 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
>И работало хорошо, и написалось быстро. ... и наступил 7 день ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:14 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
) Лох То что ты сделал это конечно же хорошо, но с точки распространения это плохо - разовая работа для Access. А я свои контролы могу использовать везде, где захочу (например, есть контрол с Grid-м у которого функциональность в 10 раз лучше, чем форма-таблица Access.) Вот такие дела ...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:21 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
>Access.Application.CreateForm ([Database], [FormTemplate]) As Form Это уже интересно. А если сделать так (раз уж нельзя чтом все само): Создаю форму на основе шаблона Access.Application.CreateForm ([Database], [FormTemplate]) As Form Каким-то образом помечаю,что она наследница шаблона(например начало названия такое же как у шаблона) Потом через конструктор правлю ее. Естественно с ограничениями типа : Не изменять унаследованные контролы,а только добавлять новые. На случай когда изменяется шаблон, пишу некий код, который: Создает на основе шаблона новую форму Ищет наследницу добавляет в вновь созданную форму все отличия наследницы от шаблона. (как с текстом модуля работать знаю , наверное можно и контролы програмно добавлять) Переименовывает наследницу , а новой форме дает ее имя. Ищем следующую наследницу .... Ищем наследниц второго уровня .... Таким образом изменения шаблона транслируются в другие формы. Этакая макроподстановка. Может кто пробывал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:28 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
2 Amel Ну давай не будем рассуждать - что такое хорошо, что такое плохо. Мне НЕ нужен был универсальный контрол. Требуемый контрол имел смысл только в рамках одного проекта. Причем был очень тесно завязан в внутренней логикой работы. Которая тоже была в процессе разработки, и могла на ходу меняться. Любое изменение логики - изменение визуальных контролов. Исходя из таких предпосылок - на фиг мне внешний ActiveX? Мне лучше встроенных/родных аксесовских форм ничего и не придумать. А разработкой универсальных чудо-бубнов я давно не занимаюсь. Если бы надо было написать супер-пупер грид - очевидно что не на аксесе Но я бы и писать его наверное не стал. Их в сети валяется вагон и маленькая тележка. Даже начальство с полпинка можно раскрутить на покупку лицензионных копий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:30 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
)) Лох А что злится то сразу а??? То что ты сделал для одного проекта, как ты уже и сказал, а если есть много проектов а? Тогда же что делать??? И тем более OCX меньше места занимает, чем формы в md*.*. ........... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:37 |
|
||
|
Можно ли наследовать форму
|
|||
|---|---|---|---|
|
#18+
2 Latuk как с текстом модуля работать знаю , наверное можно и контролы програмно добавлять CreateControl Идея может быть и хорошая, но я не пробовал, да и не буду. Страшно :) Работать оно будет, но (имхо) 50% времени будет уходить на подгонку этого чудо-визарда под какие-то непредусмотренные действия программиста. Если все так серьезно - может действительно в сторону дотнета пристальный взгляд обратить? 2 Amel А я и не злюсь. Просто пояснил. Много проектов - проимпортировать формочки. А уж места они занимают - экспортни модуль класса в txt и погляди. Или вообще - сделай одну библиотечную базку, подцепляй ее через ссылки. Если надо ActiveX - ну значит надо. На разработку хорошего (действительно универсального) контрола времени уходит порядочно, потому и не использую. Кому шашечки, а кому и ехать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 14:43 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32235416&tid=1679935]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 360ms |

| 0 / 0 |
