【问题标题】:Getting Mouse Clicks in the area next to TabPage Headers在 TabPage 标题旁边的区域中获得鼠标点击
【发布时间】:2019-07-12 03:40:21
【问题描述】:

我正在尝试在自定义 TabControl 中处理鼠标点击。如果用户单击 TabPage 上方区域中的任何位置,我至少需要处理 MouseDown 和 MouseUp。显然,它可以单击选项卡。但是,选项卡旁边似乎有一个“死”区域,它不会触发 MouseDown 事件。

MouseMove() 正在触发。只是没有其他鼠标/单击事件。我已向 TabControl 添加了多选项卡选择模式,我希望他们能够单击单个选项卡或选项卡外部以取消选择所有“选定”选项卡。需要帮助找出最简单的解决方案。

如果您需要更多信息或说明,请告知。

编辑:我能够使用来自 LarsTech 的答案。非常感谢。

在我的控制下,我添加了:

    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);

        Parent.MouseDown += testMousedown;
    }

    private void testMousedown(object sender, MouseEventArgs e)
    {
        if (Bounds.Contains(e.Location))
        {
            MessageBox.Show("tab space clicked");
        }
    }

【问题讨论】:

    标签: c# winforms tabcontrol


    【解决方案1】:

    查看容器的 MouseDown 事件:

    protected override void OnMouseDown(MouseEventArgs e) {
      base.OnMouseDown(e);
    
      if (tabControl1.Bounds.Contains(e.Location)) {
        MessageBox.Show("tab space clicked");
      }
    }
    

    如果 TabControl 位于 Panel 中,则必须使用该 Panel 的 MouseDown 事件。

    【讨论】:

    • 这是在自定义控件中。我可以这样做吗?原因,鼠标处理需要在控件本身内部处理。
    • @tobeypeters 当然。自定义控件将是容器,因此请为该容器使用 MouseEvents。
    • 实际上,问题是 MouseDown 没有被触发,在图片中标记的“Dead”区域。只有那个“小”部分没有点击记录。在那个“死区”旁边,它又开始工作了。当它不只是工作时,它真的让我陷入了循环。
    • @tobeypeters 您是否声称它“有点”有效?请记住,您是在容器控件中侦听 MouseDown 事件,而不是在 TabControl 中。
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多