using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.Windows.Forms;

namespace Toolcs

{

class DragComponent

{

#region 实现窗体内的控件拖动

//用法:在Form初始化或者Form_Load时先执行

//DragComponent a = new DragComponent();

//a.initProperty(groupBox1);

//将界面groupBox1上的所有控件都绑定MyMouseDown、MyMouseLeave、MyMouseMove事件。

private Control control;

const int Band = 5;

const int MinWidth = 10;

const int MinHeight = 10;

private EnumMousePointPosition m_MousePointPosition;

private Point p , p1;

private enum EnumMousePointPosition

{

MouseSizeNone = 0 , //'无

MouseSizeRight = 1 , //'拉伸右边框

MouseSizeLeft = 2 , //'拉伸左边框

MouseSizeBottom = 3 , //'拉伸下边框

MouseSizeTop = 4 , //'拉伸上边框

MouseSizeTopLeft = 5 , //'拉伸左上角

MouseSizeTopRight = 6 , //'拉伸右上角

MouseSizeBottomLeft = 7 , //'拉伸左下角

MouseSizeBottomRight = 8 , //'拉伸右下角

MouseDrag = 9 // '鼠标拖动

}

private void MyMouseDown ( object sender , System.Windows.Forms.MouseEventArgs e )

{

p.X = e.X;

p.Y = e.Y;

p1.X = e.X;

p1.Y = e.Y;

}

private void MyMouseLeave ( object sender , System.EventArgs e )

{

m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;

control.Cursor = Cursors.Arrow;

}

private EnumMousePointPosition MousePointPosition ( Size size , System.Windows.Forms.MouseEventArgs e )

{

if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))

{

if (e.X

{

if (e.Y

{

return EnumMousePointPosition.MouseSizeTopLeft;

}

else

{

if (e.Y > -1 * Band + size.Height)

{

return EnumMousePointPosition.MouseSizeBottomLeft;

}

else

{

return EnumMousePointPosition.MouseSizeLeft;

}

}

}

else

{

if (e.X > -1 * Band + size.Width)

{

if (e.Y

{

return EnumMousePointPosition.MouseSizeTopRight;

}

else

{

if (e.Y > -1 * Band + size.Height)

{

return EnumMousePointPosition.MouseSizeBottomRight;

}

else

{

return EnumMousePointPosition.MouseSizeRight;

}

}

}

else

{

if (e.Y

{

return EnumMousePointPosition.MouseSizeTop;

}

else

{

if (e.Y > -1 * Band + size.Height)

{

return EnumMousePointPosition.MouseSizeBottom;

}

else

{

return EnumMousePointPosition.MouseDrag;

}

}

}

}

}

else

{

return EnumMousePointPosition.MouseSizeNone;

}

}

private void MyMouseMove ( object sender , System.Windows.Forms.MouseEventArgs e )

{

Control lCtrl = (sender as Control);

if (e.Button == MouseButtons.Left)

{

switch (m_MousePointPosition)

{

case EnumMousePointPosition.MouseDrag:

lCtrl.Left = lCtrl.Left + e.X - p.X;

lCtrl.Top = lCtrl.Top + e.Y - p.Y;

break;

case EnumMousePointPosition.MouseSizeBottom:

lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

p1.X = e.X;

p1.Y = e.Y; //'记录光标拖动的当前点

break;

case EnumMousePointPosition.MouseSizeBottomRight:

lCtrl.Width = lCtrl.Width + e.X - p1.X;

lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

p1.X = e.X;

p1.Y = e.Y; //'记录光标拖动的当前点

break;

case EnumMousePointPosition.MouseSizeRight:

lCtrl.Width = lCtrl.Width + e.X - p1.X;

//      lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

p1.X = e.X;

p1.Y = e.Y; //'记录光标拖动的当前点

break;

case EnumMousePointPosition.MouseSizeTop:

lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

break;

case EnumMousePointPosition.MouseSizeLeft:

lCtrl.Left = lCtrl.Left + e.X - p.X;

lCtrl.Width = lCtrl.Width - (e.X - p.X);

break;

case EnumMousePointPosition.MouseSizeBottomLeft:

lCtrl.Left = lCtrl.Left + e.X - p.X;

lCtrl.Width = lCtrl.Width - (e.X - p.X);

lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

p1.X = e.X;

p1.Y = e.Y; //'记录光标拖动的当前点

break;

case EnumMousePointPosition.MouseSizeTopRight:

lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

lCtrl.Width = lCtrl.Width + (e.X - p1.X);

lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

p1.X = e.X;

p1.Y = e.Y; //'记录光标拖动的当前点

break;

case EnumMousePointPosition.MouseSizeTopLeft:

lCtrl.Left = lCtrl.Left + e.X - p.X;

lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

lCtrl.Width = lCtrl.Width - (e.X - p.X);

lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

break;

default:

break;

}

if (lCtrl.Width

if (lCtrl.Height

}

else

{

m_MousePointPosition = MousePointPosition(lCtrl.Size , e); //'判断光标的位置状态

switch (m_MousePointPosition) //'改变光标

{

case EnumMousePointPosition.MouseSizeNone:

control.Cursor = Cursors.Arrow;       //'箭头

break;

case EnumMousePointPosition.MouseDrag:

control.Cursor = Cursors.SizeAll;     //'四方向

break;

case EnumMousePointPosition.MouseSizeBottom:

control.Cursor = Cursors.SizeNS;      //'南北

break;

case EnumMousePointPosition.MouseSizeTop:

control.Cursor = Cursors.SizeNS;      //'南北

break;

case EnumMousePointPosition.MouseSizeLeft:

control.Cursor = Cursors.SizeWE;      //'东西

break;

case EnumMousePointPosition.MouseSizeRight:

control.Cursor = Cursors.SizeWE;      //'东西

break;

case EnumMousePointPosition.MouseSizeBottomLeft:

control.Cursor = Cursors.SizeNESW;    //'东北到南西

break;

case EnumMousePointPosition.MouseSizeBottomRight:

control.Cursor = Cursors.SizeNWSE;    //'东南到西北

break;

case EnumMousePointPosition.MouseSizeTopLeft:

control.Cursor = Cursors.SizeNWSE;    //'东南到西北

break;

case EnumMousePointPosition.MouseSizeTopRight:

control.Cursor = Cursors.SizeNESW;    //'东北到南西

break;

default:

break;

}

}

}

public  void initProperty (Control ctl)

{

control = ctl;

for (int i = 0 ; i

{

control.Controls[i].MouseDown += new System.Windows.Forms.MouseEventHandler(MyMouseDown);

control.Controls[i].MouseLeave += new System.EventHandler(MyMouseLeave);

control.Controls[i].MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove);

}

}

#endregion

}

}

c# groupbox大小,C# 实现可拖动和调整大小的控件相关推荐

  1. android程序设计排序方法,Android编程之可以实现拖动排序的listview控件

    DragSortListView是一个可以实现拖动排序的listview控件,是我看到的交互较为复杂的开源代码中不管是代码质量还是流畅性都最好的. DragSortListView 简称DSLV,继承 ...

  2. swift 拖动按钮_Swift 简单控件示例:滑块(UISlider)

    转载请声明出处:http://www.jb51.cc/article/p-pkdvamyy-ga.html ---------------------------------------------- ...

  3. 常用MFC控件基础使用(Edit Button Check Combo Tree 显示位图 控件大小自适应、线程、右键菜单、控件调整移动、MFC背景)

    常用MFC控件基础使用 1.Edit Control 2.Button控件 3.Check控件 4.Combo Box 5.Tree 控件 5.快捷键设置 6 显示缓冲区位图 7 窗口自适应大小 8 ...

  4. android向上拖动查看图文详情控件

    摘自:http://blog.csdn.net/qifengdeqingchen/article/details/51659735 一.淘宝商品详情页效果 先看一下淘宝详情页的效果 我们的效果 二.实 ...

  5. android 仿淘宝、京东商品详情页 向上拖动查看图文详情控件

    一.淘宝商品详情页效果 先看一下淘宝详情页的效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView ...

  6. android switch控件的大小,关于Android Action Bar 上的 Switch控件

    是这样的: 因为要在Action Bar 上弄个 Switch 按钮,所以我照 http://stackoverflow.com/questions/12107031/how-to-add-a-swi ...

  7. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  8. pyqt5中控件缩放功能_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  9. WinForm 实现两个容器之间控件的拖动及排列(图文)

    1. 启动程序,图如下: 2. 拖动 Button 后的效果如下: 3. 程序源代码如下: public partial class TestControlDrag : Form{/// <su ...

最新文章

  1. 【CMU】图卷积神经网络中的池化综述,Pooling in Graph Convolutional Neural Network
  2. 解決 IE10 浏览器无法使用 ASP.NET From 验证登录的问题
  3. 深入理解分布式技术 - TCC 事务模型及实战
  4. JTS基本概念和使用
  5. CCNA配置试验之七 PPP中PAP和CHAP的验证
  6. css compressor java_利用YUI Compressor压缩JS/CSS之终极秘籍
  7. LeetCode题 - 83. 删除排序链表中的重复元素 python实现
  8. 三大运营商移动电话用户总数公布了 同比增长6.2%
  9. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...
  10. jdbc面试_JDBC面试问答
  11. Atitit 函数式常用子操作与组合 目录 1. 集合类的操作 1 1.1. Transform、map 1 1.2. paip.提升效率---filter map reduce 的java 函
  12. linux多线程 进程休眠,转载:Linux多线程之线程休眠
  13. 什么是p12证书?ios p12证书怎么获取?
  14. iOS扫码识别之后添加震动/播放声音提示、歌词解析并随音乐滚动显示(包含demo源码)
  15. 怎么禁用计算机上的自动播放,关闭自动播放,小编教你Win7怎么关闭自动播放功能...
  16. Keil软件使用及流水灯设计
  17. 程序中图片透明 函数
  18. 中国LED芯片行业市场竞争状况分析及十si五发展趋势研究报告2021~2027年
  19. #Star Way To Heaven 优化二分 /prim凉宫春日的忧郁
  20. 手机号查QQ号(Python3版)

热门文章

  1. 如何在工作中自学UI设计
  2. 在两个页面之间互相写其控件内的值
  3. (原創) 如何利用copy() algorithm將array輸出到cout? (C/C++) (STL)
  4. 使用阿里云CentOS安装LAMP时,安装PHP扩展需要注意的事情
  5. Vagrant Ansible Playbook 安装一群虚拟机
  6. 微信朋友圈:应对春节千亿访问量背后的故事
  7. ZZUOJ1196: 单调数
  8. 0基础搭建Hadoop大数据处理-初识
  9. C#软件自动更新程序
  10. Elasticsearch2.x Cluster Health