Страницы: 1
RSS
Контекстное меню TextBox
 
Доброго всем време суток! С Праздничком!  
У меня возник такой интерес, как вместо кнопок сделать контекстное меню к каждому Text и ComboBox. Поискал, почитал и кое-что нашел (во вложении)! Но есть непонятки:  
1. Контекстное меню запускается только 1 раз, на следующий вылетает ошибка! Почему???  
2. Как привязать действие к пункту меню?!  
Заранее всем благодарен за помощь!
 
1. Контекстное меню запускается только 1 раз, на следующий вылетает ошибка! Почему??? - потому что такое меню уже есть.  
 
Проверил:  
Sub tt()  
For Each bb In Application.CommandBars  
Debug.Print bb.Name  
If bb.Name = "MyBar" Then bb.Delete  
Next  
End Sub  
 
Перед добавлением проверяйте - если есть, не добавляйте.
 
Вот например так работает (сделал наскоро), хотя я уверен - это не лучший вариант (вначале я просто это меню удалял, если находилось):  
 
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  
   'проверка, нажата ли правая клавиша мыши  
   If Button = 2 Then  
       Dim Copy  
       Dim Paste  
       Dim CopyAndPasteMenu  
       Dim bb As CommandBar, mbar As Boolean, bbi As Integer  
         
       For Each bb In Application.CommandBars  
           If bb.Name = "MyBar" Then mbar = True: bbi = bb.Index: Exit For  
       Next  
   If mbar = False Then  
       Set CopyAndPasteMenu = CommandBars.Add(Name:="MyBar", Position:=msoBarPopup, Temporary:=True)  
       Set Copy = CopyAndPasteMenu.Controls.Add  
       With Copy  
           '.FaceId = CommandBars("Standard").Controls("Copy").ID ' косяк  
           .Caption = "Copy the selection"  
       End With  
       Set Paste = CopyAndPasteMenu.Controls.Add  
       With Paste  
           '.FaceId = CommandBars("Standard").Controls("Paste").ID  
           .Caption = "Paste from the Clipboard"  
       End With  
               CopyAndPasteMenu.ShowPopup  
   Else  
       Application.CommandBars(bbi).ShowPopup  
   End If  
       Exit Sub  
   End If  
End Sub
 
Кстати, помучался... ИМХО мучался потому, что слова Copy и Paste зарезервированы, поэтому мои эксперименты результата не давали.  
Изменил эти имена - получилось.
 
Переделал кардинально алгоритм создания меню - просто открываем меню, если не удалось, то создаём.
 
{quote}{login=Hugo}{date=02.05.2010 11:14}{thema=}{post}Кстати, помучался... ИМХО мучался потому, что слова Copy и Paste зарезервированы, поэтому мои эксперименты результата не давали.  
Изменил эти имена - получилось.{/post}{/quote}  
Hugo, в форуме о зарезервированных словах(Copy и Save) уже говорилось с Юрий М. Те же проблемы были. Я к тому, сколько еще желающих на эти грабли...
Я сам - дурнее всякого примера! ...
 
Да, в копилке практически такой же пример. Но там это меню каждый раз создаётся заново. Может и правильно - мало ли какое там меню под этим именем кто создал :)  
Я сейчас в процессе написания кода посчитал свои КоммандБары - 98 штук! Пяток явно нестандартных, из них про 2 я уже ничего не помню...
 
{quote}{login=KuklP}{date=02.05.2010 11:38}{thema=Re: }{post}{quote}{login=Hugo}{date=02.05.2010 11:14}{thema=}{post}Кстати, помучался... ИМХО мучался потому, что слова Copy и Paste зарезервированы, поэтому мои эксперименты результата не давали.  
Изменил эти имена - получилось.{/post}{/quote}  
Hugo, в форуме о зарезервированных словах(Copy и Save) уже говорилось с Юрий М. Те же проблемы были. Я к тому, сколько еще желающих на эти грабли...{/post}{/quote}  
 
Да, я то сам их всегда стороной обхожу, но тут у человека код уже написан, работает, но вот OnAction заставить работать не получалось, пока эти слова не поменял :)  
Ну конечно, как может работать  
 
       With Copy  
           .OnAction = "ActionC"  
       End With  
 
хотя почему то  
 
       With Copy  
           .Caption = "Copy the selection"  
       End With  
 
вполне себе отрабатывает...
 
marceshor? Ваш пост(чуть не написал потс:-),исправил, ради Бога без обид, так правда, получилось) последний? О том и писано - не стоит зарезервированные. Скажем, (с Юрий М) в прямом вызове вызывало ошибку(что  есть хорошо, ибо отладчик включался), а через call copy ошибки не вызывал. Нельзя было отследить.
Я сам - дурнее всякого примера! ...
 
Правда, всем огромное спасибо! Всё работает!
Страницы: 1
Читают тему
Наверх