C#在拖动和悬停在选项卡上时切换选项卡(tabcontrol)

时间:2015-10-23 17:28:18

标签: c# .net winforms

如果有人可以帮助我,我将非常感激,我想要的只是代码,允许我更改标签页,同时从tabcontrol外面的树视图拖动treenode并将鼠标悬停在尚未显示的标签页上打开(选择)。

1 个答案:

答案 0 :(得分:2)

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

编辑:

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

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

EDIT2:

将一个简单的应用程序与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;
            }
        }

    }