|
|
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Написал следующий код в moduleclass MyTextbox Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В чем ошибка ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 13:46 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 13:58 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Теперь внутри класса ловиться GotFocus, но событие z2_GotFocus не возбуждаеться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:10 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
И что это дает Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:11 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Если в OnGotFocus не написано "[Event Procedure]", то обработчик не будет вызываться. Насчет z2_GotFocus - интересно поставить брейкпойнт на m_TextBox.BackColor = 16776960 и посмотреть, куда оно идет дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:13 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Так все нормально. Я в ручную написал все, а вот когда поставил его объявление, то получилось , что они разные . Система посавил параметр Код: plaintext Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:16 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Совет: Проверь, чтобы наступало событие Private Sub Class_Terminate() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:27 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
А как можно не использовать дополнительную процедуру для установки а инициализировать их как бы в конструкторе ( как в С++ ) Может здесь тоже есть что то похожее ? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:34 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Имел ввиду members. За совет спасибо. Работает. Объект уничтожаеться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 14:36 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
авторРаботает. (не видел этого топика, потому про конструктор ответил в соседнем) И что работает? неужто z2_GotFocus заработал? Мнится мне, что вретес. Малость там шпиндель не довернут. ЗЫ Похоже Вам не совсем ЭТО надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 15:28 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Пардон - довернут - глазки еще не залиты, а уже не смотрют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 15:29 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
еще пару замечаний. 1) Если MyTextBox нужет ТОЛЬКО для того, чтобы менять цвет фона, ТО ему не нужен RaseEvent. Уведомление о наступлении события GotFocus получат все слушатели, подписавшиеся на него, в порядке подписки. Строка m_TextBox.OnGotFocus = "[Event Procedure]" ПОДПИСЫВАЕТ класс MyTextBox на получение соответствующих уведомлений. ОНА ОБЯЗАТЕЛЬНА в данном месте. В формах механизм подписки к событиям своих контролах скрыт и приближен к VB синтаксису. В форме (и прочих интересных) местах достаточно перехватывать GotFocus самого контрола. Поставьте MsgBox "ggg" в zz_GotFocus и в Text2_GotFocus - получите его дважды 2) Про деструктор. Гетс расказывает, что выполнение операций типа Set SomeThing=Nothing в деструкторе, вообще говоря ненадежно и может не освобождать ссылок в действительности. Зависит от версии/сервис пака. Почему-то надежнее в деструкторе вызывать метод (типа ) Terminate в котором собственно и производятся такие действия. Т.Е. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 15:47 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
2 Victosha В аксесс97 создал модуль класса (давно не брал я в руки фишек) (для наглядности): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. так (без явного вызова деструктора) вроде работает, но без Set TARC = Nothing события Class_Terminate по выходу из формы не происходят. (смотрел в отладчике) (хотя ссылка должна умирать ?) Чем это чревато? Что говорит наука? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:48 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Чем это чревато? Что говорит наука? чреватость покажет Диспечер задач - используемая Акесом память будет постоянно рости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:57 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Да , Вы правы. Но в ссылке где то стояла .dll и я ее взял просто :-) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:03 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Вроде память жрет. Но и без класса тоже жрет. Закрывается нормально. ватсон выдает: Код: plaintext 1. 2. 3. 4. в итоге выяснил, что проблема в попытке "Порвать связь" между классами оставил только те операции, которые не вызывают сбоя: Код: plaintext 1. 2. 3. находим еще одну интересность: Код: plaintext 1. 2. 3. 4. 5. 6. ...побег я, потом посмотрю (если накидаете советов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:03 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
2 фыыв автордополнив Property Set ArcForm строкой .OnClose = []) на бегу именно это ключём выглядит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:18 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Вроде память жрет. Но и без класса тоже жрет. Закрывается нормально. VBA всегда жрет память. Да же если открывать/закрывать пустую форму (без модуля), такова, видимо, его ущербная природа. Но при работе с классами, по моему опыту (и моему примеру), корректное убиение объектов в классе позволяло вместо 100-150 кб роста памяти, ограничится 5-10-30кб роста. Класс уничтожается (и ссылка на frm) по следующему примерному алгоритму (это обсуждение было на сайте Андрея Митина) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:26 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Спасибо. я посмотрел, у меня действительно Код: plaintext 1. 2. 3. (сразу не посмотрел - у меня там 6-7 подформочек к классу прикручены) (почему, кстати, предпочитаете юзать OnUnload? Close вроде позже?) просто при непосредственном вызове в форме Код: plaintext 1. 2. Set ArcF = Nothing деструктор запускался, но после отработки ВСЕГО кода (т.е. после прохождения End Sub процедуры Form_Close()) Аксесс валился "в ватсона". ( то же и при Set TARC = Nothing в Form_Close) ЗЫ: при этом нет нужды делать Public Sub Destroy() (у меня - Terminate к примеру) Достаточно Private т.к. ArcF_Close ее найдет и так (приватно), а вызванная снаружи (из Form_Close) она валит Аксесс после отработки Class_Terminate и выхода из Form_Close в Ватсона влет (на ArcF_Close поток ес-сно уже не попадает). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 18:32 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
2 фыыв Сударь, интересно - Вы специально такие примерчики составляете, дабы на вшивость людей проверять, или НА САМОМ ДЕЛЕ ТАКОЙ код пишите-) Вам надо отвечать или Вы просто шутите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 18:41 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
отвечу через 10 мин - труба зовет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 18:43 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
и хде это просветленное мнение? или великого гуру токо на наезд и хватило? ждемс :0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 19:09 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
1) раз у Вас есть Private Sub ArcF_Close() значит, где-то есть ArcF.OnClose="[Event Procedure]" - то есть явная подписка на это событие, иначе ArcF_Close() просто не будет его получать. 2) не событие Close есть по крайней мере два подпсичика. из них ближайший (первый по списку вызвова) модуль класса самой формы. Второй - экземляр T_ArcF. Оповещение о наступлении события будет пытаться отдаваться обоим, пока каждый из них явно не откажется от подписки. Первый отписывается методом изничтожения процедуры Form_Close, второй - установлением ArcF.OnClose="" . 3) При наступлении события сначала о нем извещается ближайший подписчик. В нем, Вы уничтожаете ссылку на подпысываемый объект НЕ ОТПИСЫВАЯ его от очереди событий. То Есть, Если бы Вы завели метод в классе T_ArcF типа Peperty Set ClearForm(nothingForm as Form) ArcF.OnClose="" ... ArcF.OnПрочиеПодписанныеСобытия="" ... Set ArcF=nothingForm End Sub И вызывали ли бы в Private Sub Form_Close() set TARC.ClearForm = nothing End Sub То у Вас все (скорее всего) нормально работало. В приведенном же варианте кода по завершении Form_Close() ПЫТАЕТСЯ ПРОИЗВЕСТИСЬ вызов Private Sub ArcF_Close() КОГДА УЖЕ никакого ArcF И В ПОМИНЕ НЕТ (внутри класса) Как же на это реагировать - видно, ШУТИТЬ ИЗВОЛИТЕ. -))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 19:19 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
хуру, наезд все бы Вам обижаться. Нет пива, а он наезд. эхь Вот упьюся один и будет Вам ФормСлозе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 19:20 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32518275&tid=1674343]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
202ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 541ms |

| 0 / 0 |
