如何实现鼠标右键点击TabControl的标签页时也能激活该标签页,
就像鼠标左键选择标签页一样。

解决方案 »

  1.   

    给你一个思路,我没实现,有可能是错误的
     Private Sub TabControl1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabControl1.MouseDown
            Dim p As New Point
            p.X = TabControl1.MousePosition.X - Me.Left - TabControl1.Left
            p.Y = TabControl1.MousePosition.Y - Me.Top - TabControl1.Top - 15
            Dim tp As TabPage = Me.TabControl1.GetChildAtPoint(p)
            Console.WriteLine("xx")
            Console.WriteLine(p)
            If Not tp Is Nothing Then
                TabControl1.SelectedTab() = tp
            End If    End Sub====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2
      

  2.   

    为什么有那么多人对非标准的Windows操作方式如此热衷呢?......
      

  3.   

    说归说,楼上给的方法不对,TabControl1.GetChildAtPoint(p)获取不了TabPage。想了半天,没有什么好的办法,因为TabPage的标签页位置不一定是固定的,如果移动了就不好办了。想来想去还是只有控件本身才能解决问题,从外部来想办法不太好弄。
      

  4.   

    其实TabControl1.GetChildAtPoint(p)这个方法在发帖之前已经用过了,实现不了
    才来问的。问:为什么有那么多人对非标准的Windows操作方式如此热衷呢?......
    答:什么叫非标准的Windows操作方式?vs.net的IDE就是这样的。
      

  5.   

    这个不是会不会的问题,而是能不能的问题。VS的IDE能那样,是因为控件本身支持,而TabControl在设计时应该就是设计成不支持右键切换标签了(个人猜想),也许深入控件窗口去挖掘,hack一下,可能能行,至于简单的办法,实在是想不到了。
      

  6.   

    这个不是会不会的问题,而是能不能的问题。VS的IDE能那样,是因为控件本身支持,而TabControl在设计时应该就是设计成不支持右键切换标签了(个人猜想),也许深入控件窗口去挖掘,hack一下,可能能行,至于简单的办法,实在是想不到了。
      

  7.   

    不知道大家为什么对这个问题感到奇怪!
    其实不仅vs.net,如果注意一下的话,会发现大部分通过
    TabControl控制MDI窗体的软件,都有这个功能,即
    在非当前激活的TabPage的标签页上右键时,先激活该TabPage,然后弹出菜单。
    如Editplus,uedit等等。我现在的想到的方法是在MouseDown中判断,如果是右键,模拟一次左键点击。
    我还没有这么做,不知道会不会有其它的副作用。
      

  8.   

    准确地说,不是大家感到奇怪,是我感到奇怪,
    我前面所说的Windows标准操作方式是针对Windows操作系统界面来说的,
    比如IE的Internet选项对话框的那些选项就使用一个标准的TabControl。至于VS.NET的那种方式,并没有说不好,只是这些新控件在设计上就支持这种操作方式,
    而一定要那种“老式传统”的控件支持这种方式,就有点勉为其难了。当然也不是说不可能,如果你熟悉Spy++,Windows窗口属性,Windows消息传递机制,
    以及一点点hack的精神,我想还是可以做到的。另外,你说“我现在的想到的方法是在MouseDown中判断,如果是右键,模拟一次左键点击。
    我还没有这么做,不知道会不会有其它的副作用。”
    至少在WinForm中不行,因为Mouse事件传递的参数中的Button属性都是只读的,不能替换,
    这个我已经试过了。————————————————————给了思路,要代码;
    给了代码,要C#;
    给了C#代码,还说不明白......唉!这个世界做好人咋就这么难咧......
      

  9.   

    我用模拟鼠标左键,成功达到了需求(暂未发现副作用)。
    模拟鼠标方法如下:
    定义:
    private static extern int mouse_event(int dwFlags,int dx,int dy, int cButtons, int dwExtraInfo);
    private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
    调用:
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);暂不结帖,等待高人指点正统的解决方法。
      

  10.   

    漏了一句,补上:
    [System.Runtime.InteropServices.DllImport("user32")]
    private static extern int mouse_event(int dwFlags,int dx,int dy, int cButtons, int dwExtraInfo);
    private const int MOUSEEVENTF_LEFTDOWN = 0x0002;