В работе
24 / 19 / 6
Регистрация: 13.07.2018
Сообщений: 829
Записей в блоге: 12

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

22.03.2019, 17:46. Показов 13294. Ответов 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
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,961
Записей в блоге: 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
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,619
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
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,619
24.03.2019, 23:04
Цитата Сообщение от glsn Посмотреть сообщение
причем ошибка если буфер обмена пуст
А так:
Вложения
Тип файла: zip TextBoxMenu_v04.zip (36.7 Кб, 64 просмотров)
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,619
24.03.2019, 23:22
Цитата Сообщение от glsn Посмотреть сообщение
но почему то сначала выпадает ошибка - м.б. что то нужно включить в References?
Я как раз стремился от них избавится - в версии 02 пропустил объявления в заголовке формы.
Сейчас проверил.
Вставил модуль в своё приложение (скопировал с форума) - работает без ссылки на библиотечку MSO.
Смотрите v04 ...
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,619
25.03.2019, 04:28
В результате имеем ссылки, как на скрине (ниже), и всё работает!
У меня, во всяком случае (MSA 2010 x86 Eng).
Спасибо vb001 за идею.
Спасибо glsn, за тестирование.
Буду рад любым ...
Спасибо за внимание!
Миниатюры
Контекстное меню для TextBox на форме  
0
 Аватар для VinniPuh
9147 / 6179 / 594
Регистрация: 27.03.2013
Сообщений: 20,049
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru