感谢 xiashengwang 提供。

原文地址:http://www.cnblogs.com/xiashengwang/p/4024505.html#3077216

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Windows.Forms;
 5 using System.Drawing;
 6
 7 namespace WindowsFormsApplication1
 8 {
 9     public class DragableTabControl : TabControl
10     {
11         public DragableTabControl()
12         {
13         }
14
15         protected override void OnMouseDown(MouseEventArgs e)
16         {
17             base.OnMouseDown(e);
18             TabPage tabPage = GetTabPageByTab(new Point(e.X, e.Y));
19             if (tabPage != null)
20             {
21                 this.DoDragDrop(tabPage, DragDropEffects.All);
22             }
23         }
24
25         private TabPage GetTabPageByTab(Point point)
26         {
27             for (int i = 0; i < this.TabPages.Count; i++)
28             {
29                 if (GetTabRect(i).Contains(point))
30                 {
31                     return this.TabPages[i];
32                 }
33             }
34             return null;
35         }
36
37         protected override void OnDragOver(DragEventArgs e)
38         {
39             base.OnDragOver(e);
40             TabPage source = (TabPage)e.Data.GetData(typeof(TabPage));
41             if (source != null)
42             {
43                 TabPage target = GetTabPageByTab(PointToClient(new Point(e.X, e.Y)));
44                 if (target != null)
45                 {
46                     e.Effect = DragDropEffects.Move;
47                     MoveTabPage(source, target);
48                 }
49                 else
50                 {
51                     e.Effect = DragDropEffects.None;
52                 }
53             }
54             else
55             {
56                 e.Effect = DragDropEffects.None;
57             }
58         }
59
60         private void MoveTabPage(TabPage source, TabPage target)
61         {
62             if (source == target)
63                 return;
64
65             int targetIndex = -1;
66             List<TabPage> lstPages = new List<TabPage>();
67             for (int i = 0; i < this.TabPages.Count; i++)
68             {
69                 if (this.TabPages[i] == target)
70                 {
71                     targetIndex = i;
72                 }
73                 if (this.TabPages[i] != source)
74                 {
75                     lstPages.Add(this.TabPages[i]);
76                 }
77             }
78             this.TabPages.Clear();
79             this.TabPages.AddRange(lstPages.ToArray());
80             this.TabPages.Insert(targetIndex, source);
81             this.SelectedTab = source;
82         }
83     }
84 }

转载于:https://www.cnblogs.com/cdengjia/p/4140026.html

实现在tabcontrol里面拖拽tabpage来设置tabpage的位置相关推荐

  1. JQuery 拖拽元素,并移动其他元素位置

    JQuery 拖拽元素,并移动其他元素位置 <!DOCTYPE html> <html> <head><meta charset="UTF-8&qu ...

  2. UE4 创建Actor类型蓝图拖拽到场景设置白色球消失

    使用Actor或者其他类型为基类的蓝图类后,拖拽到场景中,会有白色球 如果是继承某个蓝图的子蓝图,需要找到父类蓝图,选中最顶层的自身组件 细节面板的Rendering中的Editor Billboar ...

  3. vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)

    最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...

  4. js可拖拽工作流程图设置插件

    下载地址 js实现的工作流程图插件,可拖拽设置的流程图组织架构图插件,办公OA软件里少不了这种流程设置功能. dd:

  5. vue 2.0需求拍摄证件照(需要设置人头取景框,鼠标也拖拽,键盘方向键可调整位置)

    继续昨天的代码更新一下 需求是: vue2 主页面是一个表格,存在按钮点击进行调取摄像头拍照,拍照呢要有头像的取景框,鼠标可移动,键盘通过方向键也可移动,调整了昨天的代码存在的问题,拖动会拍照一部分外 ...

  6. Unity3D通过拖拽UI的四个角伸缩UI

    从今天开始写博客啦,把自己觉得有用的记录下来,供自己以后使用. 最近做项目遇到的一个需求,简单的实现了一下,大佬们有更好的方法恳请留言告诉我. 下图为UI的层级结构,Anchors下的四个物体为UI的 ...

  7. Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17718579) 在Android开发中,我们常常用到ListView ...

  8. css拖拽调整高度,两种为wangEditor添加拖拽调整高度的方式:CSS3和jQuery UI

    wangEditor是一款优秀的Web富文本编辑器,但如果能像KindEditor那样支持拖拽调整高度就更好了.有两种方式可以为wangEditor添加这一功能,这里使用的wangEditor版本为2 ...

  9. dom 元素拖拽实现

    文章目录 原生 JS 实现 div 拖拽 HTML 拖拽 API REF   之前找实习的时候,面试官出了道 "原生 JS 实现 div 元素拖拽",当时实现了个大概,不过很多细节 ...

最新文章

  1. atomikos mysql,记一次 Atomikos 分布式事务的使用
  2. 运行matplotlib出现:AttributeError: module ‘matplotlib‘ has no attribute ‘verbose‘
  3. android 自定义checkBox的样式
  4. QT乱码总结0.Qt乱码产生因素
  5. Windows Server 笔记之网络负载平衡(NLB)和服务质量(QoS)简介
  6. Codeforces Round #419 (Div. 2)
  7. ASP.NET Core 源码学习之 Options[2]:IOptions
  8. 【渝粤题库】广东开放大学 标准的研制与编制 形成性考核
  9. 推荐系统(2)-协同过滤1-UserCF、ItemCF
  10. Java实现首字母大写、驼峰命名与、划线转换,校验null
  11. 定时器控件timer winform 114869229
  12. ASP.NET中使用C#文件下载四方法
  13. 洛谷P1087 FBI树
  14. javamail发送邮件,解决被垃圾邮件问题
  15. 电脑linux下载官网下载,Bluestar Linux
  16. Laravel Blade 模板用法
  17. 阿里云云计算 33 PolarDB的优势 产品架构
  18. C++ 一维高斯积分的实现
  19. iperf3网络测试工具下载网址
  20. 项目管理十大知识领域之项目成本管理

热门文章

  1. android handler 主线程吗,[android开发]非主线程进行handler操作
  2. python3生成随机数_Python3.3中如何产生伪随机数
  3. 【杂谈】当前模型量化有哪些可用的开源工具?
  4. 【AI基础】OpenCV,PIL,Skimage你pick谁
  5. 【caffe速成】caffe图像分类从模型自定义到测试
  6. 全球及中国实心轴编码器行业前景趋势与运营动向分析报告2022版
  7. python从命令行获取参数_python从命令行获取参数操作
  8. 打造微量元素产业-丰收节交易会·李喜贵:签约南国健康产业
  9. Go 面向对象三大特性
  10. 【转载】zookeeper学习