powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Class Module
17 сообщений из 42, страница 2 из 2
Class Module
    #32859087
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно добавить в класс моего лэйбла свойство "Контекстные меню" (ShortcutMenu). Это нужно для того, чтобы после отображения контестного меню данного лэйбла не отображалось основное контекстное меню формы.

Как я понял это делается с помощью Property Let
Попробывал так (текст модуля класса):
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Option Compare Database
Option Explicit

Private WithEvents lbl As Label
Private mfrm As Form
Private mcmb As CommandBar
Private IsSwitch As Boolean

Public Property Get Label() As Label
    Set Label = lbl
End Property

Public Property Set Label(lblNewLabel As Label)
    Set lbl = lblNewLabel
    lbl.OnMouseDown = "[Event Procedure]"
    Set mfrm = lbl.Parent
End Property

Public Property Get CommandBar() As CommandBar
    Set CommandBar = mcmb
End Property

Public Property Set CommandBar(cmbNewCommandBar As CommandBar)
    Set mcmb = cmbNewCommandBar
End Property

Public Property Get ShortcutMenu() As Boolean
    ShortcutMenu = IsSwitch
End Property

Public Property Let ShortcutMenu(Value As Boolean)
    IsSwitch = Value
End Property

Private Sub lbl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CurrentLabelID = lbl.HelpContextId
    If Button = acRightButton Then mcmb.ShowPopup
    lbl.ShortcutMenu = False 'Ошибка здесь
End Sub
При нажатии правой кнопкой мыши на лэйбле возникает ошибка: Method or data member not found
...
Рейтинг: 0 / 0
Class Module
    #32859775
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Me.Requery
...
Рейтинг: 0 / 0
Class Module
    #32859814
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vsevolod Vlbl.ShortcutMenu = False 'Ошибка здесь
а есть такое свойство у Label?
ищите в Object Browser'e
да и скомпилировать класс не помешает. сразу всё наружу вылезет
...
Рейтинг: 0 / 0
Class Module
    #32859838
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov Vsevolod Vlbl.ShortcutMenu = False 'Ошибка здесь
а есть такое свойство у Label?
ищите в Object Browser'e
да и скомпилировать класс не помешает. сразу всё наружу вылезет
В том-то и дело, что свойства такого нет, а нужно :)
...
Рейтинг: 0 / 0
Class Module
    #32859862
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если такое невозможно, то сразу так и скажите, а то я тут репу морщу весь день уже :)
...
Рейтинг: 0 / 0
Class Module
    #32859945
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда попробуйте одно из двух
Код: plaintext
1.
2.
3.
4.
Private Sub lbl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CurrentLabelID = lbl.HelpContextId
    If Button = acRightButton Then mcmb.ShowPopup
    mfrm.ShortcutMenu = False 'Ошибки здесь не будет
End Sub
второе: не заморачивайтесь с обработкой событий от лейбл для показа контекстного меню. Для этого есть свойство ShortcutMenuBar.
...
Рейтинг: 0 / 0
Class Module
    #32859954
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторmfrm.ShortcutMenu = False
В этом случае после отработки этого события нужно вкючать ShortcutMenu формы, а для этого писать еще один класс (класс формы), связывать его с классом лэйбла и по таймеру устанавливать ShortcutMenu = True.
Этот вариант мне не по душе :)

авторне заморачивайтесь с обработкой событий от лейбл для показа контекстного меню
Так тоже нельзя. Потому что через контекстное меню заложена функция, которой требуется HelpContextId
...
Рейтинг: 0 / 0
Class Module
    #32859965
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, кстати, готов рассмотреть любой другой способ получения HelpContextId лэйбла при вызове его контекстного меню :)
...
Рейтинг: 0 / 0
Class Module
    #32860678
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Me.Requery
...
Рейтинг: 0 / 0
Class Module
    #32861076
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub mfrm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    mfrm.ShortcutMenu = True
End Sub

Private Sub lbl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    mfrm.ShortcutMenu = False
End Sub
...
Рейтинг: 0 / 0
Class Module
    #32861242
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть все таки пишем класс для формы... :)
...
Рейтинг: 0 / 0
Class Module
    #32861324
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал класс формы, где на MouseMove повесил mfrm.ShortcutMenu = True.
Но это событие срабатывает только на Области Данных, тобиш Section(0), а если пользователь поводит мышкой в загаловке, то беда.
Какие есть выходы кроме написания класса для Section?
...
Рейтинг: 0 / 0
Class Module
    #32861785
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновлю вопрос.
Есть класс лэйбла, который задает лэйблу контестное меню (зачем это надо здесь обсуждать не будем). По щелчку правой кнопкой мыши на лэйбле это меню появляется, после чего появляется еще и контестное меню формы (которое тоже нужно, но не на лэйбле). Как мне "убрать с лэйбла" контестное меню формы?
...
Рейтинг: 0 / 0
Class Module
    #32861973
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в одной книге написано так: "Property Let используется объекту свойств, которые ему не принадлежат". А вот как это делать написать забыли :(
Может кто знает, а? :)
...
Рейтинг: 0 / 0
Class Module
    #32861975
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Млин
"Property Let используется для назначения объекту свойств, которые ему не принадлежат"
...
Рейтинг: 0 / 0
Class Module
    #32863869
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем с контекстным меню формы кое как разобрался.
---
Проблема номер N :)
Есть класс все того же лэйбла:
Код: 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.
27.
28.
29.
30.
31.
32.
33.
Option Compare Database
Option Explicit

Private WithEvents lbl As Label
Private mfrm As Form
Private mcmb As CommandBar
Private IsSwitch As Boolean

Public Property Get Label() As Label
    Set Label = lbl
End Property

Public Property Set Label(lblNewLabel As Label)
    Set lbl = lblNewLabel
    lbl.OnMouseDown = "[Event Procedure]"
    Set mfrm = lbl.Parent
End Property

Public Property Get CommandBar() As CommandBar
    Set CommandBar = mcmb
End Property

Public Property Set CommandBar(cmbNewCommandBar As CommandBar)
    Set mcmb = cmbNewCommandBar
End Property

Private Sub lbl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If mfrm.ShortcutMenu = True Then
        mfrm.ShortcutMenu = False
    End If
    CurrentLabelID = lbl.HelpContextId
    If Button = acRightButton Then mcmb.ShowPopup
    mfrm.TimerInterval =  10 
End Sub
По щелчку на контекстном меню лэйбла выполняется функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function CallHelp()
    Dim HTbl As DAO.RecordSet
        If CurrentLabelID >  0  Then
            Set HTbl = CurrentDb.OpenRecordset("select * from __temp_help where " _
                    & "H_ID = " & CurrentLabelID & "")
            If Not HTbl.EOF Then
                DoCmd.OpenForm "context_help"
                Forms!context_help!fld_TEXT = HTbl!H_TEXT
            End If
            HTbl.Close
        Else
            MsgBox "Справка по этому элементу не доступна", , "Справка"
        End If
End Function
Если CurrentLaelID = 0, то отображается соответствующее сообщение, нажимаем ОК и снова появляется контекстное меню лэйбла . Причем происходит это только на одной сабформе - на всех остальных все работает нормально. С чем это может быть связано?
...
Рейтинг: 0 / 0
Class Module
    #32864939
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Me.Requery
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Class Module
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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