Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/58: Рейтинг темы: голосов - 58, средняя оценка - 4.84
В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12

Контекстное меню для TextBox на форме

22.03.2019, 17:46. Показов 12925. Ответов 71

Форумчане добрый вечер!
Подскажите сложно сделать контекстное на поле TextBox типа:

Отменить
_________
Вырезать
Копировать
Вставить
Удалить
__________
Выделить все

Причем если функция недоступна, поле меню Enable = False.

Добавлено через 9 минут
Через макросы не нашел все те команды, которые нужны.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2019, 17:46
Ответы с готовыми решениями:

По следам темы "Контекстное меню для TextBox на форме"
Выделено из https://www.cyberforum.ru/ms-access/thread2423596.html Eugene-LS, Eugene-LS, Здравствуйте подключил ваш код V5 к базе...

Одно контекстное меню для 5 textbox'ов
У меня 5 текстбоксов. Нужно для каждого текстбокса создать контекстное меню с одной кнопкой "свернуть строки". Как это проще...

Свое контекстное меню для TextBox
Много написано в сети о контекстном меню для текстбокса для VB-6 а вот для VB.net ничего не нашел. Нашел, как убрать родимое...

71
В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12
23.03.2019, 11:36  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
есть смысл пускать ТАКОГО пользователя
Смысл базы и есть в том чтобы пользователи, заносили туда и брали от туда информацию.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12235 / 5082 / 814
Регистрация: 07.08.2010
Сообщений: 14,950
Записей в блоге: 4
23.03.2019, 12:04
Цитата Сообщение от vb001 Посмотреть сообщение
Смысл базы и есть в том чтобы пользователи, заносили туда и брали от туда информацию
это не проблема --можно ввести столбик выбора и экспортировать выборку в ворд/ексель
занести тоже не проблема ---надо только не разрешать корректировку/удаление старых записей
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
23.03.2019, 12:12
Цитата Сообщение от vb001 Посмотреть сообщение
как сделать по средством VBA?
Посредством VBA делается так:
Visual Basic
1
2
3
4
5
6
 Dim CmBar As Office.CommandBar, _
     CmBarButt As Office.CommandBarButton
 Set CmBar = Application.CommandBars.Add("имя контекстного меню", msoBarPopup, False, True)
 Set CmBarButt = CmBar.Controls.Add(1)
 CmBarButt.Caption = "надпись какая-нибудь"
 CmBarButt.OnAction = "=функция какая-нибудь()"
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
23.03.2019, 12:15
Цитата Сообщение от vb001 Посмотреть сообщение
Вырезать
Копировать
Вставить
Все это - элементы стандартного контекстного меню,
которое и так должно появляться при нажатии правой кнопки мыши.
Без всяких VBA.
0
В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12
23.03.2019, 12:21  [ТС]
В стандартном меню много ненужного. Связанного с Access. Типа конструктора
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
23.03.2019, 12:27
Цитата Сообщение от vb001 Посмотреть сообщение
Типа конструктора
Если даете пользователям базу, допускающую конструктор, то он и будет доступен.
Давайте им базу, не допускающую конструктора - mde/accde.
0
В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12
23.03.2019, 12:41  [ТС]
.mde вот меню
Миниатюры
Контекстное меню для TextBox на форме  
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
23.03.2019, 12:46
Во-первых, этого не может быть.

Во-вторых, зачем Вы мне меню формы показываете?
В меню поля даже в mdb никакого конструктора не будет.
0
604 / 127 / 45
Регистрация: 12.04.2015
Сообщений: 519
23.03.2019, 13:23
Панург, shanemac51, alvk, Панург, я вчера набросал такое контекстное меню, но не стал размещать т.к. столкнулся вот с какой проблемой.
Дело в том, что в теме vb001 оговаривает следующее условие:
Цитата Сообщение от vb001 Посмотреть сообщение
Причем если функция недоступна, поле меню Enable = False
это действительно логично
я набросал меню, задал обычные макрокоманды (в общем модуле), но вот мне не удалось (наверное в силу того, что я раздавлен работой и семьей и не столько много времени уделяю Access как хотелось бы) задать условие в каких случаях пункт меню активен, а в каком нет. ТО, что сделал (пример во вложении) будет работать при условии помещения курсора в само поле, но, заметил, что при переходе по записям (следующая / предыдущая) может быть момент когда курсор не на поле в таком случае и при вызове контекста все его пункты активны. Как это можно исправить?
и еще проблема это пункт меню "вставить". Из здравого смысла он должен быть активен если в буфере обмена что то есть, в противном случае - он не активен. Такое возможно реализовать? что то поискал похожее по Инету - но толком не подходило, хотя может быть искал, как выразился, Панург - "плохо". Кстати, пример высланный Вами - отличный, но как привязать к OnAction FindControl - не понял если честно. А ведь в такой модели вышеупомянутая проблема - решается без какого то обработчика заметил.
Образец.rar
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
23.03.2019, 13:29
Цитата Сообщение от glsn Посмотреть сообщение
Панург, shanemac51, alvk, Панург,....
Ну, не буду мешать.
0
604 / 127 / 45
Регистрация: 12.04.2015
Сообщений: 519
23.03.2019, 15:14
Capi, не поможете?
0
В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12
23.03.2019, 19:23  [ТС]
Capi, вы же не обиделись? Давайте все вместе сделаем хорошую функцию. И доведем ее до ума. Думаю я не единственный у кого появилась данная задача.

Добавлено через 2 минуты
glsn, круто получилось

Добавлено через 13 минут
glsn, вы сделали выделить все с привязкой к конкретной форме и полю. То есть не смогу я этот модуль использовать в разных формах.
Как переменной присвоить имя открытой формы.
Если мы в место конкретных имен формы и поля будем указывать переменные, которые при нажатии правой кнопки будут записывать имя текущего поля и формы.
На пальцах как то так. Как в жизнь это воплотить?
0
604 / 127 / 45
Регистрация: 12.04.2015
Сообщений: 519
23.03.2019, 20:20
Цитата Сообщение от vb001 Посмотреть сообщение
То есть не смогу я этот модуль использовать в разных формах
я не решил вопрос выделения записи. макрокомандой DoCmd.RunCommand acCmdSelectAll на практике не работало - я решил так: ставим курсор в 0 и двигаемся до конца строки тем самым выделив всю.
Вам не обязательно работать в модуле. Я так понимаю что если мы пропишем .OnAction = "нашапродедура" и ниже в модуле формы её сделаем - тоже должно работать, но на практике пока не пробовал т.к. такие вещи вообще потребности нет делать (в базах которые делаю для себя во всяком случае).
0
Эксперт MS Access
 Аватар для Eugene-LS
13229 / 5913 / 1520
Регистрация: 05.10.2016
Сообщений: 16,562
24.03.2019, 21:30
Цитата Сообщение от vb001 Посмотреть сообщение
Если мы в место конкретных имен формы и поля будем указывать переменные, которые при нажатии правой кнопки будут записывать имя текущего поля и формы.
Вот отвязал от формы и от поля + немного изменил.
Кликните здесь для просмотра всего текста
Visual Basic
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
Option Explicit
'--------------------------------------------------------------------------
' Module    : modTextBoxMenu
' Author    : vb001  ( + я чутка)
' Date      : 24.03.2019
' Purpose   : Контекстное меню для TextBox
'--------------------------------------------------------------------------
'   По материалам:
'   https://www.cyberforum.ru/ms-access/thread2423596-page2.html
'--------------------------------------------------------------------------
 
Private objTBox As Control
Public Sub BuildTextBoxMenu(objTextBox As Control)
'Построение временного меню ....
'--------------------------------------------------------------------------
Dim App As Application
Dim ObjCommandBar As Object  'Office.CommandBar
Dim ObjButton As Object 'Office.CommandBarButton
'--------------------------------------------------------------------------
On Error GoTo BuildTextBoxMenu_Err
    
 
    KillCustomMenuName "TextBoxMenu" 'удаляем если уже построено
    
    
    Set App = Application
    Set ObjCommandBar = App.CommandBars.Add("TextBoxMenu", 5, False, True) '5=msoBarPopup - Последний аргумент = временный
    
    Set objTBox = objTextBox
    
    
    With ObjCommandBar
        Set ObjButton = .Controls.Add(1, 128) '128=acCmdUndo
        With ObjButton
            .Caption = "Отменить (Undo)"
        End With
            
        Set ObjButton = .Controls.Add(1, 21) '21 = Cut
        With ObjButton
            .Caption = "Вырезать (Cut)"
            .BeginGroup = True
            If objTextBox.SelLength = 0 Then
                .Enabled = False
            End If
        End With
                
        Set ObjButton = .Controls.Add(1, 19) '19 = Copy
        With ObjButton
            .Caption = "Копировать (Copy)"
            If objTextBox.SelLength = 0 Then
                .Enabled = False
            End If
        End With
        
        Set ObjButton = .Controls.Add(1, 22) '22 = Paste
        With ObjButton
            .Caption = "Вставить (Paste)"
            'Если буфер обмена пустой ...
            If IsTextInClipboard = False Then
                .Enabled = False
            End If
        End With
        
        
        Set ObjButton = .Controls.Add(1, 478) '478 Delete
        With ObjButton
            .Caption = "Удалить (Delete)"
            '.FaceId = 1088 ???
            If objTextBox.SelLength = 0 Then
                .Enabled = False
            End If
 
        End With
        
        Set ObjButton = .Controls.Add(1, 1)
        With ObjButton
            .Caption = "Выделить всё!"
            .BeginGroup = True 'Разделитель
            .FaceId = 194
            .OnAction = "BuildTextBoxMenu_SelectAll"
        End With
        
        
    End With
'--------------------------------------------------------------------------
'Готово!
    objTextBox.ShortcutMenuBar = "TextBoxMenu"
 
BuildTextBoxMenu_End:
    On Error Resume Next
    Set ObjButton = Nothing
    Set ObjCommandBar = Nothing
    Set App = Nothing
    Err.Clear
    Exit Sub
 
BuildTextBoxMenu_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: BuildTextBoxMenu in module: modTextBoxMenu", vbCritical, "Error in Application"
    Err.Clear
    Resume BuildTextBoxMenu_End
    
End Sub
Public Function BuildTextBoxMenu_SelectAll()
    objTBox.SetFocus
    objTBox.SelStart = 0
    objTBox.SelLength = Len(objTBox.Text)
End Function
Private Sub KillCustomMenuName(sName$)
' Удаление меню с заданным названием
'--------------------------------------------------------------------------
Dim App As Application
On Error GoTo KillCustomMenu_Err
    
    Set App = Application
    App.CommandBars(sName).Delete
    
 
KillCustomMenu_End:
    On Error Resume Next
    Set App = Nothing
    Err.Clear
    Exit Sub
 
KillCustomMenu_Err:
    'MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: KillCustomMenu in module: modUtilities", vbCritical, "Error in Application"
    Err.Clear
    Resume KillCustomMenu_End
End Sub
Private Function IsTextInClipboard() As Boolean
'Проверка есть ли текст в буфере обмена ClipBoard
'--------------------------------------------------------------------------
Dim sText As String
Dim cbObject As Object
'--------------------------------------------------------------------------
On Error GoTo IsTextInClipboard_Err
    
    Set cbObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    cbObject.GetFromClipboard
    sText = cbObject.GetText
    'Debug.Print sText
    sText = Trim(sText)
    If Len(sText) > 0 Then
        IsTextInClipboard = True
    End If
 
IsTextInClipboard_End:
    On Error Resume Next
    Set cbObject = Nothing
    Err.Clear
    Exit Function
 
IsTextInClipboard_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Function: IsTextInClipboard in module: 00_Tests", vbCritical, "Error in Application"
    Err.Clear
    Resume IsTextInClipboard_End
End Function
Миниатюры
Контекстное меню для TextBox на форме  
Вложения
Тип файла: zip TextBoxMenu_v02.zip (111.2 Кб, 34 просмотров)
2
604 / 127 / 45
Регистрация: 12.04.2015
Сообщений: 519
24.03.2019, 22:22
Eugene-LS, круто, но почему то сначала выпадает ошибка - м.б. что то нужно включить в References?
1
604 / 127 / 45
Регистрация: 12.04.2015
Сообщений: 519
24.03.2019, 22:27
причем ошибка если буфер обмена пуст
0
Эксперт MS Access
 Аватар для Eugene-LS
13229 / 5913 / 1520
Регистрация: 05.10.2016
Сообщений: 16,562
24.03.2019, 23:04
Цитата Сообщение от glsn Посмотреть сообщение
причем ошибка если буфер обмена пуст
А так:
Вложения
Тип файла: zip TextBoxMenu_v04.zip (36.7 Кб, 64 просмотров)
0
Эксперт MS Access
 Аватар для Eugene-LS
13229 / 5913 / 1520
Регистрация: 05.10.2016
Сообщений: 16,562
24.03.2019, 23:22
Цитата Сообщение от glsn Посмотреть сообщение
но почему то сначала выпадает ошибка - м.б. что то нужно включить в References?
Я как раз стремился от них избавится - в версии 02 пропустил объявления в заголовке формы.
Сейчас проверил.
Вставил модуль в своё приложение (скопировал с форума) - работает без ссылки на библиотечку MSO.
Смотрите v04 ...
0
Эксперт MS Access
 Аватар для Eugene-LS
13229 / 5913 / 1520
Регистрация: 05.10.2016
Сообщений: 16,562
25.03.2019, 04:28
В результате имеем ссылки, как на скрине (ниже), и всё работает!
У меня, во всяком случае (MSA 2010 x86 Eng).
Спасибо vb001 за идею.
Спасибо glsn, за тестирование.
Буду рад любым ...
Спасибо за внимание!
Миниатюры
Контекстное меню для TextBox на форме  
0
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,046
25.03.2019, 06:40
Интересно, как скоро запортятся и поперепутаются ранее введенные данные в БД, ибо по любому ТС в спешке может вместо - Скопировать, нажать - Вставить, т.к. у него, после вчерашнего корпоратива рука дрогнула, а он и не заметил, что не в туда мышом ткнул, и пошел другие данные редактировать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2019, 06:40

Создать контекстное меню для нескольких TextBox
Все наверное знают, что при нажатии текста например в ворде и т.д правой клавишей мыши появляется панель, где кнопки - копировать,...

Контекстное меню в виде объектов на форме
Привет ! Нужно создать на форме подобие контекстного меню с разделительными линиями. Чтобы каждый пункт меню был отдельным объектом,...

Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы предоставлялось контекстное меню
Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы предоставлялось контекстное меню???

TextBox: вырубить контекстное меню + правильная обработка вставки из буфера
Добрый день! Есть 2 вопроса, первичный поиск результатов не дал. У меня есть свой класс типа TextBoxMyClass : TextBox. 1...

Контекстное меню по нажатию правой кнопки мыши на форме
Приветствую Вас! Подскажите пожалуйста, как сделать так, чтобы при нажатии в любом произвольном месте экрана правой кнопкой мыши,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru