Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 00:30   #1
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию Навязчивое контекстное меню - как избавиться?

Доброго времени суток!
В нормально, в общем-то, работающей программе, сделанной мной с применением средств Visual Studio 2008 (язык C#) и Crownwood DotNetMagic, кроме моих собственных, есть несколько недостатков, пришедших из этих средств разработки, которые известны, наверное, всем и с которыми так или иначе я справился или их обошёл (например, разнобой во внешних видах элементов управления в состояниях enabled и disabled, разные рамки и проч.). Не могу избавиться только от одного дефекта: элементы управления (текстбоксы, датагриды и др.) реагируют на правую клавишу мыши навязчивым выводом какого-то непонятного контекстного меню (см. картинку). Откуда оно берётся, мне неведомо ни сном, ни духом. Если я предусмотрел своё меню, то безо всякого порядка выводится то моё, то это "паразитное" меню, а если у меня нет своего контекстного меню, то всё равно выводится это "паразитное".
Подскажите, пожалуйста, как от него избавиться! (Святой водой уже брызгал - не помогло )

Дополнение от 12.05.12 в 19 часов:
Путём антинаучного тыка мне удалось установить, что описанное явление встречается только при использовании DotNetMagic, а именно я делаю следующее:
1) Создаю UserControl, наследованный от Crownwood.DotNetMagic.Controls.Tabb edGroups - контейнер, в который будут выводиться табулированные страницы (TabPages) с возможностью их докинга самыми разнообразными способами.
2) Создаю "внутренний контрол" (inner control) будущей таб. страницы - UserControl с именем, предположим, myControl, кстати свойство которого ContextMenuStrip = none, и размещаю на нём элементы ввода/вывода (текстбоксы, комбобоксы и проч.), как обычно делается в форме (System.Windows.Forms.Form).
3) По необходимости динамически создаю методом экземпляра класса, наследованного от TabbedGroups (см. п. 1), его таб. страницу с необходимыми атрибутами (наименованием, внутренним контролом и иконкой):
Crownwood.DotNetMagic.Controls.TabP age page = new Crownwood.DotNetMagic.Controls.TabP age(title, myControl as Control, imageList, imageIndex);
Всё несколько сложнее, но принцип такой.
Так вот, хм.
Не в Crownwood.DotNetMagic.Controls.Tabb edGroups ли порылась собака? Не оттуда ли выпирает это непотребное меню прикреплённых к её страницам элементов? Ведь в других случаях никакого такого меню у этих элементов не бывает.
С этими меню приложение я никак оставить не могу: мои юзеры горняки и им никакого дела нет до юникода и методов ввода невидимых символов, их главная забота: мышь бы не потерять в ладони.
Поэтому очень прошу головы спецов по Crownwood DotNetMagic пошевелить мозгами, не может ли это меню быть наведённым оттуда, и каким образом? Ведь главное понять причину, а не пытаться, не поняв, с нею бороться на авось, как это делаю я.
PS
Прошу извинить за лишние пробелы, но в этом редакторе побороть их мне не удалось.
Изображения
Тип файла: png Непотребное меню.png (16.7 Кб, 79 просмотров)

Последний раз редактировалось Гаврилов; 12.05.2012 в 21:09.
Гаврилов вне форума Ответить с цитированием
Старый 12.05.2012, 09:21   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

может быть поставить return на событие onmouseclick ? точнее проверку на нажатие пр. кнопки мыши и если нажата то return.
wm_leviathan вне форума Ответить с цитированием
Старый 12.05.2012, 09:41   #3
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Проверил на нескольких типах. Не помогает!
Видимо, собака глубже зарыта.
Кстати, против ожидания, и моё собственное меню тоже выводится, если оно есть.
Спасибо.
Гаврилов вне форума Ответить с цитированием
Старый 12.05.2012, 11:25   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

так пробовали ?
Код:
  textBox1.ContextMenu = new ContextMenu();
Reskov вне форума Ответить с цитированием
Старый 12.05.2012, 12:22   #5
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Я не писал код вручную, а, как обычно, воспользовался автоматизацией, предоставляемой MS Visual Studio, т.е. вытащил контекстное меню из тулбокса (почему бы благородному дону не сделать этого, если им до сих пор, за долгое время в этом не было замечено никакого криминала?). Предлагаю пример датагрида с контекстным меню - как это автоматом отобразилось в методе InitializeComponent().

Был создан DataGridView dg11:
this.dg11 = new System.Windows.Forms.DataGridView() ;

Независимо от него создано контекстное меню с указанием компонента-контейнера:
this.cms11 =
new System.Windows.Forms.ContextMenuStr ip(this.components);

Созданы при помощи new пункты этого меню:
this.gridAddRow = new System.Windows.Forms.ToolStripMenuI tem(); и т.д.

и добавлены к меню cms11:
this.cms11.Items.AddRange(
new System.Windows.Forms.ToolStripItem[] { this.gridAddRow, ... };

Далее следует привязка меню к элементу DataGridView dg11:
this.dg11.ContextMenuStrip = this.cms11;

По-моему, получилось не хуже, чем Вы предлагаете.

К тому же, а что делать с теми элементами, в которых мне не нужно контекстного меню? Ведь это "паразитное" меню там всё равно будет выскакивать.
Гаврилов вне форума Ответить с цитированием
Старый 13.05.2012, 19:28   #6
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Вот уже более 120 просмотров, а предложений только два, считая детское:
"А не пробовали textBox1.ContextMenu = new ContextMenu();" - (интересно, как ещё может выглядеть в коде создание контекстного меню элемента).
Неужели никто не сталкивался с таким явлением?
Если кто-нибудь действительно интересуется этой темой, то взгляните, пожалуйста, ещё раз на самую первую мою реплику с просьбой помочь. Там теперь есть существенное дополнение.
Гаврилов вне форума Ответить с цитированием
Старый 13.05.2012, 20:26   #7
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
и размещаю на нём элементы ввода/вывода (текстбоксы, комбобоксы и проч.), как обычно делается в форме
Дело в том что такое меню появляется если вы просто создатите textbox.
и если вы укажете
Код:
textBox1.ContextMenu = null;
оно все равно будет появляться..
Код:
textBox1.ContextMenu = new ContextMenu();
Вы хоть пробовали так как я говорил??
Reskov вне форума Ответить с цитированием
Старый 13.05.2012, 20:27   #8
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

ДА, ПРОБОВАЛ.
Гаврилов вне форума Ответить с цитированием
Старый 13.05.2012, 20:51   #9
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Уважаемый Reskov! Беру свои слова обратно (насчёт детского предложения) и прошу меня извинить!!!
Ваше предложение действует!
Конечно, я знал, что ContextMenu сильнее, чем ContextMenuStrip, который по умолчанию = null. Но я в спешке перекомпилировал проекты и сам Solution только в режиме дебагера, а надо было это сделать и в режиме Release, причём, в первую очередь (классы этих контролов находятся у меня в подчинённом проекте).
Теперь я знаю, что мне делать, чтобы решить этот вопрос раз и навсегда.
Большое спасибо!
PS
И всё же интересно чисто по причине любопытства, откуда берутся эти паразитные ContextMenu. Раньше я этого безобразия не наблюдал.
Гаврилов вне форума Ответить с цитированием
Старый 13.05.2012, 21:30   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стандартные-системные от контрола.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать контекстное меню в TextBox как в visual studio aleks_pilipenko C# (си шарп) 2 08.12.2011 19:36
контекстное меню J.Bond Помощь студентам 3 17.06.2010 21:18
Контекстное меню mar4elo Общие вопросы Delphi 19 18.09.2009 14:30
Как добавить свой раздел в стандартное контекстное меню yaver Общие вопросы Delphi 2 26.11.2008 19:44
Как добавить подменю в системное контекстное меню Lucky13 Win Api 5 19.03.2007 20:17