powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / унаследовать класс стандартного контрола
11 сообщений из 11, страница 1 из 1
унаследовать класс стандартного контрола
    #37918141
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли в Аксессе унаследовать класс какого-либо стандартного контрола (напр. TextBox), дополнить его навыми свойствами и событиями, прописать код в некоторые стандартные события и потом использовать в формах? Покопался - не нашел. Кто как делает, подскажите пожалуйста.
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37918261
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergej_S,

ДелаеЦЦа свой класс,
в котором есть private withevents переменная as textbox, public метод или set/get свойство, в который (-ое) передаёЦЦа ссылка на существующий textbox,
в котором осуществляется подписка на события textbox-a путём присвоения свойствам .On<Событие> = "[Event Procedure]",
плюс в класс дописывается желаемый функционал,
в частности
а) свой
б) дублирующий функционал "предка".

Как-то так.
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37918316
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ЦЦав котором осуществляется подписка
плюс в класс дописывается желаемый функционал,
осуществляеЦЦа
дописываеЦЦа
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37918342
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч,

спс. Целиком и полностью.
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37918656
ЦЦа,

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

А ваапще механизм мощный - у меня на нем много построено.

Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
'   В качестве управляющего списка могут выступать комбобокс или листбокс
'   Поэтому для корректного перехвата событий необходимо иметь
'   один из двух контролов
Private m_sControlType As String
Private WithEvents m_cmb As ComboBox
Private WithEvents m_lst As ListBox
Private m_ctl As Control ' это либо один лиьо второй

'   Генерация события для перехвата "наверху" для обработки выбранного значения в списке
Public Event ApplyWhere(vListValue As Variant, vCondition As Variant, iListIndex As Long, iListCount As Long, vListData() As Variant)

'
'   Для передачи методов в родной класс
'
Public Property Let ListValue(VALUE As Variant)
    m_ctl.VALUE = VALUE
    DoEvents
    m_ctl.Requery
    DoEvents
    m_vListValue = m_ctl.VALUE
End Property

Public Property Get ListIndex() As Long
    m_iListIndex = m_ctl.ListIndex
    ListIndex = m_ctl.ListIndex
End Property

Public Property Get ListCount() As Long
    m_iListCount = m_ctl.ListCount
    ListCount = m_ctl.ListCount
End Property

'
'   Инициализация и запись фактического аксесовского контрола
'
Public Function Constructor _
( _
    SysData As SysData, _
    ctl As Control, sListKey As String, sListCode As String, _
    sRoleName As String, _
    Optional sServerOrClientMode As String = "Server" _
)

    If sListCode = "" Then sListCode = sListKey
    
    m_sListKey = sListKey
    m_sListCode = sListCode
    m_sRoleName = sRoleName
    m_sServerOrClientMode = sServerOrClientMode
    If m_sServerOrClientMode = "" Then m_sServerOrClientMode = "Server"
    
    Set m_SysData = SysData
    Set m_ctl = ctl
    Select Case ctl.ControlType
    Case acComboBox:
        m_sControlType = "ComboBox"
        Set m_cmb = ctl
        m_cmb.AfterUpdate = "[Event Procedure]"
    Case acListBox:
        m_sControlType = "ListBox"
        Set m_lst = ctl
        m_lst.AfterUpdate = "[Event Procedure]"
    End Select
    
    LoadData
    
End Function

'
'   Перехват событий аксесовских контролов для обработки своей логикой
'
Private Sub m_cmb_AfterUpdate()

    m_SysData.ApplyWhere Me.ListKey, Me.ListValue, Me.Where, Me.ListIndex, Me.ListCount, Me.ListData
    '    Запуск собственного события
    RaiseEvent ApplyWhere(Me.ListValue, Me.Where, Me.ListIndex, Me.ListCount, Me.ListData)

End Sub

Private Sub m_lst_AfterUpdate()

    m_SysData.ApplyWhere Me.ListKey, Me.ListValue, Me.Where, Me.ListIndex, Me.ListCount, Me.ListData
    '    Запуск собственного события
    RaiseEvent ApplyWhere(Me.ListValue, Me.Where, Me.ListIndex, Me.ListCount, Me.ListData)

End Sub
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37918961
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто интересноЦЦа,

А какой-нибудь примерчик будет? Ну для наглядности.П-Л любезно предоставил примерчик.Просто интересноТолько если можно создать совсем новое событие для того самого текстбокса.Для того же самого - нельзя. Но поскольку создаёЦЦа свой класс, экземпляр которого в месте использования описываеЦЦа с WithEvents, мы вольны создать любой набор событий для него. В примере П-Л это Public Event ApplyWhere.
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37920537
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. К своему стыду, полностью осилить глубину мыслей отвечающих не смог, т.к. в Аксессе новичек, одно время на Фоксе писал.

Очень прошу, сделайте и запостите простой проект, где , например:
-в модуле создается класс контрола Label, который при клике на нем меняет свой цвет;
-в форма есть лейблы, на которых это можно проверить
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37920578
Sergej_SСпасибо. К своему стыду, полностью осилить глубину мыслей отвечающих не смог, т.к. в Аксессе новичек, одно время на Фоксе писал.

Очень прошу, сделайте и запостите простой проект, где , например:
-в модуле создается класс контрола Label, который при клике на нем меняет свой цвет;
-в форма есть лейблы, на которых это можно проверить
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #37921123
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непоймучка,

ооо, даст иш фантастиш, данке. сейчас поговнокодим ...
...
Рейтинг: 0 / 0
унаследовать класс стандартного контрола
    #38000027
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все работает супер, вот тут мне еще по развитию темы ответили, может новичкам пригодится
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / унаследовать класс стандартного контрола
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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