【问题标题】:C# Switch tabs(tabcontrol) while dragging and hovering over a tabC# 切换选项卡(tabcontrol),同时拖动和悬停在选项卡上
【发布时间】:2015-10-23 17:28:17
【问题描述】:

如果有人可以帮助我,我将不胜感激,我想要的只是允许我在从 tabcontrol 外部的树视图拖动树节点并将鼠标悬停在尚未存在的标签页上时更改标签页的代码打开(选中)。

【问题讨论】:

  • 鼠标悬停切换点击页面的部分之前已经回答过...stackoverflow.com/a/9662219/1246574.
  • 你需要在 tabcontrol 上处理 DragOver 事件,类似于 Jim 评论中的 mousemove。
  • 您能否发布您尝试过的代码,以便我们查看哪些代码不起作用?
  • 1.我问的这个问题是关于拖动一个树节点并悬停在一个选项卡上,这将打开一个选项卡而不是另一个。 2.不,我不会把代码发给你
  • 如果您无法发布您尝试过的代码,我们很难为您提供帮助。您声称您的代码无法正常工作,即使它应该工作,但如果没有看到您的代码,我们无能为力。

标签: c# .net winforms


【解决方案1】:

当鼠标移动到选项卡控件上而拖动操作仍然有效时,将触发 DragOver 事件。您可以在 DragOver 处理程序中使用与 Change SelectedTab of TabControl on MouseOver 中的 mousemove 逻辑类似的逻辑来切换选项卡。

编辑:

我做了一点 MSDN 研究,发现了一个可能的问题。 DragOver 坐标是 ScreenCoordinates,而示例代码中的选项卡矩形位于客户端坐标中。您需要在点击检查之前转换拖动坐标。

            Point clientPoint = tabControl1.PointToClient(new Point(e.X, e.Y));

编辑2:

将一个简单的应用程序与 TreeView 和 TabControl 放在一起,当我拖动选项卡时,以下 DragOver 处理程序会正确切换选项卡:

    private void tabControl1_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.All;

        Point clientPoint = tabControl1.PointToClient(new Point(e.X, e.Y));

        for (int i = 0; i < tabControl1.TabCount; i++)
        {
            if (tabControl1.GetTabRect(i).Contains(clientPoint) && tabControl1.SelectedIndex != i)
            {
                tabControl1.SelectedIndex = i;
            }
        }

    }

【讨论】:

  • 试过已经使用布尔值来检查所有内容。没用
  • 我会交换这两个条件。 if (tabControl1.SelectedIndex != i &amp;&amp; tabControl1.GetTabRect(i).Contains(clientPoint)).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多