В простом приложении C# WinForms, если контекстное меню назначено элементу управления Treeview, а пользователь щелкает правой кнопкой мыши узел с помощью мыши, контекстное меню отображается под узел в точке курсора, но если используется контекстное меню клавиатуры или shift + F10, меню смещается и отображается в середине дерева по длине. Почему это поведение по умолчанию и как можно отображать контекстное меню под выбранным узлом?C# - Контекстное меню TreeView вне места при использовании клавиатуры
ответ
Глядя на reference source реализации, это, как представляется, реализация по умолчанию для любого элемента управления (не только TreeView
) контекст обработки меню при активации с помощью клавиатуры, которая работает отлично подходит для TextBox
как управления , Интересно, что документация WM_CONTEXTMENU message содержит следующее заявление в Замечания раздела
Если контекстное меню создается с клавиатурой, например, если пользователь SHIFT + F10-то x- и y- координаты -1, и приложение должно отображать контекстное меню в месте текущего выбора, а не в (xPos, yPos).
, который, по-видимому, не сопровождается выполнением управления WinForms TreeView
.
Чтобы получить желаемое поведение, вы должны создать подкласс и процесс WM_CONTEXTMENU
сообщение самостоятельно TreeView
, как этот
class MyTreeView : TreeView
{
const int WM_CONTEXTMENU = 0x007B;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CONTEXTMENU && (long)m.LParam == -1 && this.ContextMenu != null)
{
var selectedNode = this.SelectedNode;
if (selectedNode == null) return;
var rect = selectedNode.Bounds;
var pt = new Point(rect.X + rect.Width/2, rect.Y + rect.Height/2);
if (!this.ClientRectangle.Contains(pt)) return;
this.ContextMenu.Show(this, pt);
return;
}
base.WndProc(ref m);
}
}
- 1. C# WinForms - TreeView, контекстное меню
- 2. Контекстное меню в Treeview
- 3. Как включить контекстное меню в TraitsUI TreeView при использовании адаптеров?
- 4. Kendo UI + AngularJS + treeview + контекстное меню
- 5. Dynamic Контекстное меню на TreeView Узлов
- 6. Контекстное контекстное меню в Netbeans
- 7. Пользовательское контекстное меню Qt
- 8. Контекстное меню
- 9. Команда меню контекстного меню Treeview не работает
- 10. Android - не разделить контекстное меню при использовании разделенной панели действий
- 11. wpf treeview xaml контекстное меню click event not firing
- 12. Контекстное меню в Treeview не открывается по выбранному элементу
- 13. WPF Treeview теряет фокус, когда Контекстное меню открыто
- 14. JavaFX TreeView скрывает контекстное меню, когда дерево пуст
- 15. Изменить контекстное меню в WPF TreeView для данных
- 16. Контекстное меню TreeView появляется на topnode вместо TreeViewItem
- 17. Как заставить контекстное меню загружаться?
- 18. контекстное меню не открывается при событии click
- 19. Контекстное меню проводника Windows Вопрос
- 20. jQuery table/list контекстное меню
- 21. Windows 7 - контекстное контекстное меню контекстного меню для Python
- 22. Edit для Windows Контекстное меню в C#
- 23. WPF Quad контекстное меню
- 24. Создание раскрывающихся меню, доступных только при использовании клавиатуры
- 25. Контекстное меню проводника Windows
- 26. Контекстное меню ключа ключа
- 27. Как показать контекстное меню Windows Explorer (контекстное меню)?
- 28. Контекстное меню в центре при масштабировании
- 29. WPF TreeViewItem Контекстное меню Unhighlights Item
- 30. контекстное меню в vb.net
, который получил это работает. Спасибо. Я не знал, что у MS есть источник ссылок для .NET Framework. Будет использовать это много! – David