用过windows form的DataGridView控件的同学都知道,编辑状态下,单元格内是一个TextBox控件
点击鼠标右键,会弹出一个默认的右键菜单,内容大概是一些复制、粘贴之类的常见文本操作命令
这种情况下如果需要实现一个自己的右键命令,一般需要先把TextBox的ShortcutsEnabled设置为false
然后在其MouseClick中判断是否是右键,执行自己的代码就行了,我比如弹出一个MessageBox的对话框在DataGridView下实现这个一样设置我是通过DataGridView的EditingControlShowing事件来处理的
其e.Control正好就是处于编辑单元格下的TextBox
但是我遇到一个问题就是 一旦把TextBox的ShortcutsEnabled=false;其MouseClick只能捕获响应鼠标左键事件,右键事件不能捕获到,如果不设置ShortcutsEnabled=false,鼠标右键弹出的就是默认菜单有哪位熟悉DataGridView的同学知道这是怎么回事吗?

解决方案 »

  1.   

    你可以换种角度来做,自己继承模版列,然后设置TextBox的contextmenu为一个空的contextmenu,这样你就不需要把ShortcutsEnabled设为false,因此也就不会影响到其他操作。
      

  2.   

    但是contextmenu = null 不会影响弹出菜单,因为contextmenu本来就是空的
      

  3.   

    to 但是contextmenu = null 不会影响弹出菜单,因为contextmenu本来就是空的Sample code as follows:
    this.TextBox.ContextMenu = new ContextMenu();// Set an empty context menu.
      

  4.   

    你通过
    ContextMenu cm = new ContextMenu();
    实例化后,就可以往cm里面填东西,然后
    this.TextBox.ContextMenu = cm;