DevExpress TreeList添加右键菜单问题

添加右键流程:

1.先在窗体上拖两个控件,分别是popupMenu和barManager

2.barManager中绑定form属性为当前窗体名称

3.点击barManager右键选择customize,可直接添加子菜单,如果需要有工具栏、菜单栏、状态栏、怎选择Designer,可添加,然后在选择customize,添加command命令,再command选中菜单中执行命令

4.绑定右键菜单事件:在MouseDown事件中处理事件

--------------------------------------------------------------------------------------------------

DevExpress  TreeList添加右键菜单时(e.X, e.Y)位置出现问题:

菜单并不是出现在弹出右键的控件上,而是弹出在整个屏幕的右上角。

错误之处就是获得e的位置是以控件为基准的,而show的时候的基准是整个屏幕;有许多控件本身就有绑定右键功能,因此不会出现这个问题。

搜索了下其他人的方法,竟然都不能用,甚为奇怪!

一、最开始的写法:MouseEventArgs e为基准

 private void tlstEquipment_MouseClick(object sender, MouseEventArgs e)
  {if (e.Button == MouseButtons.Right)
       {
         System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
         popupMenuTree.ShowPopup(p);
         }
  }

问题就是菜单显示在右上角。

二、Cursor.Position为基准

主要是参照这里 DevExpress 给TreeList添加右键菜单,注意红色的部分。

        private void treeList1_MouseUp(object sender, MouseEventArgs e)
        {
            TreeList tree = sender as TreeList;
            if (e.Button == MouseButtons.Right
                    && ModifierKeys == Keys.None
                    && treeList1.State == TreeListState.Regular)
            {
              Point p = new Point(Cursor.Position.X, Cursor.Position.Y);
                TreeListHitInfo hitInfo = tree.CalcHitInfo(e.Location);
                if (hitInfo.HitInfoType == HitInfoType.Cell)
                {
                    tree.SetFocusedNode(hitInfo.Node);
                }

                if (tree.FocusedNode != null)
                {
                    popupMenu1.ShowPopup(p);
                }
            }
        }

然而,并不能使用,实测在Cursor中并无Position这一项,更无法获得x y了。

我是.net framework 3.5,不知道是不是这个的原因。

三、this.Location为基准

参照这里:dev中用popupMenu给TreeList添加右键菜单,用法是e.X+this.Location.X这样。

  if (e.Button == MouseButtons.Right)
       {
         System.Drawing.Point point = new System.Drawing.Point(e.X+this.Location.X + 20, e.Y+this.Location.Y +40); //右键菜单弹出的位置
         popupMenu1.ShowPopup(barManager1, point);
       }

然而,同样不能使用。实测this.Location.X=0。

四、直接使用MousePosition位置

显示正确。

 private void tlstEquipment_MouseClick(object sender, MouseEventArgs e)
  {if (e.Button == MouseButtons.Right)
       {
           System.Drawing.Point p = new System.Drawing.Point(MousePosition.X, MousePosition.Y);
           popupMenuTree.ShowPopup(p);
        }
       }

奇怪得到是,上面两位给出的代码也应该是平时使用的,不至于是乱写,但为何在我这里无法正常使用呢?

时间: 2024-12-25 23:43:41

DevExpress TreeList添加右键菜单问题的相关文章

[DevExpress] GridControl添加右键菜单

1.Toolbox中找到ContextMenuStrip工具,双击添加 2.点击ContextMenuStrip上小三角,EditItems, 添加选项 3.选择GridControl, 编辑属性ContextMenuStrip,选择刚刚添加的ContextMenuStrip

dev gridcontrol添加右键菜单

概述:右键菜单肯定是GridView中经常要使用的一个功能.本文主要描述两个方面:如何在GridView中添加右键菜单,以及如何设置菜单是否可用(enable). 右键菜单肯定是gridview中经常要使用的一个功能.本文主要描述两个方面:如何在GridView中添加右键菜单,以及如何设置菜单是否可用(enable). 一.添加右键菜单 1.在VS工具箱中的“菜单和工具栏”找到ContextMenuStrip控件,双击添加. 2.点击ContextMenuStrip右上方的小三角形,打开编辑项,

添加右键菜单

有时我们安装绿色版的软件常常是没有右键菜单的,但是对于一些常用的软件,我们需要添加右键菜单,添加方法,打开记事本,复制以下内容,按照自己的需要修改下所在软件的路径将txt另存为bat格式,双击即可: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\PotPlayer] @="Open with PotPlayer" "Icon"="E:\\Program Files (x86)

Arcengine 二次开发添加右键菜单

最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图层上添加右键菜单,谷歌了一下,找到了解决的方法,原文的地址edndoc.esri.com/arcobjects/9.2/NET/1ED14BF2-A0E3-4e56-A70D-B9A7F7EC7880.htm.然后我根据这个添加了自己的右键菜单,又有一些改动. 效果如图所示(有点简陋),仅仅是简单的

添加右键菜单命令 在此处打开命令窗口(W)(带图标)

@color 0A @title 添加右键菜单命令 在此处打开命令窗口(W)(带图标) by wjshan0808 @echo off reg add HKCR\Directory\Background\shell\在此处打开命令窗口(W) /v Icon /t reg_expand_sz /d %ComSpec% /f reg add HKCR\Directory\Background\shell\在此处打开命令窗口(W)\command /ve /t reg_sz /d "%ComSpec%

仅在TabControl中的Tab中添加右键菜单

若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle> <Style TargetType="{x:Type TabItem}"> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu/> <!--

给jquery easy-ui 添加右键菜单

版权声明:转自为EasyUI 的Tab 标签添加右键菜单 1 <!doctype html> 2 <html> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 5 <title>tabs 右键菜单demo QQ:15129679</title> 6 <link rel="

在ListCtrl上添加右键菜单,并创建响应函数。

一:添加右键菜单(在选中的行上面添加右键响应菜单) 1.首先创建一个菜单资源,在该项目上右键,添加资源,菜单资源,新建一个菜单资源(不会显示顶级菜单,只显示次级菜单). 2.在自己新添加的类CMyListCtrl(该类继承自CListCtrl,并且该类类型的对象与ListCtrl资源进行了绑定),并在该类的消息中添加=NM_RCLICK消息,在它的消息处理函数中, 添加右键弹出菜单代码: CMenu menu; menu.LoadMenuW(IDR_MENU1); //加载菜单资源 CMenu*

[WinForm]TreeView 添加右键菜单

关机代码: #region 添加右键菜单 /// <summary> /// 添加右键菜单 /// <para>eg: treeF18.AttachMenu(contextMenuTree, n => n != null);</para> /// </summary> /// <param name="treeView">TreeView</param> /// <param name="co