class ControlComponent
{
#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; public enum EnumMousePointPosition
{ MouseSizeNone = 0, //'无 MouseSizeRight = 1, //'拉伸右边框 MouseSizeLeft = 2, //'拉伸左边框 MouseSizeBottom = 3, //'拉伸下边框 MouseSizeTop = 4, //'拉伸上边框 MouseSizeTopLeft = 5, //'拉伸左上角 MouseSizeTopRight = 6, //'拉伸右上角 MouseSizeBottomLeft = 7, //'拉伸左下角 MouseSizeBottomRight = 8, //'拉伸右下角 MouseDrag = 9 // '鼠标拖动 } public 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; } public void MyMouseLeave(object sender, System.EventArgs e)
{ m_MousePointPosition = EnumMousePointPosition.MouseSizeNone; control.Cursor = Cursors.Arrow; } public 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 < Band)
{ if (e.Y < Band)
{
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 < Band)
{
return EnumMousePointPosition.MouseSizeTopRight;
} else
{ if (e.Y > -1 * Band + size.Height)
{
return EnumMousePointPosition.MouseSizeBottomRight;
} else
{
return EnumMousePointPosition.MouseSizeRight;
} } } else
{ if (e.Y < Band)
{
return EnumMousePointPosition.MouseSizeTop;
} else
{ if (e.Y > -1 * Band + size.Height)
{
return EnumMousePointPosition.MouseSizeBottom;
} else
{
return EnumMousePointPosition.MouseDrag;
} } } } } else
{
return EnumMousePointPosition.MouseSizeNone;
} } public 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 < MinWidth) lCtrl.Width = MinWidth; if (lCtrl.Height < MinHeight) lCtrl.Height = MinHeight; } 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;
control.MouseDown += new System.Windows.Forms.MouseEventHandler(MyMouseDown);
control.MouseLeave += new System.EventHandler(MyMouseLeave);
control.MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove); } #endregion }

使用方法:

ControlComponent cc= new ControlComponent();

            cc.initProperty(你需要改变的控件);

C# WinForm控件移动调整大小的更多相关文章

  1. 在WPF中使用WinForm控件方法

    1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2.      在要使用WinForm控 ...

  2. [转]在WPF中使用WinForm控件方法

    本文转自:http://blog.csdn.net/lianchangshuai/article/details/6415241 下面以在Wpf中添加ZedGraph(用于创建任意数据的二维线型.条型 ...

  3. WPF 调用WinForm控件

    WPF可以使用WindowsFormsHost控件做为容器去显示WinForm控件,类似的用法网上到处都是,就是拖一个WindowsFormsHost控件winHost1到WPF页面上,让后设置win ...

  4. WinForm控件TreeView 只部分节点显示 CheckBox

    WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...

  5. Winform控件重写

    Winform控件重写 因为最近的项目中越来越多的遇到了比较特殊的一些控件,有时候我们自己封装一下可能更加方便我们的使用,下面是我们项目中用到的,简单做一个记录. TextBox控件重写 主要的控制代 ...

  6. 通过WinForm控件创建的WPF控件无法输入的问题

    今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...

  7. c#Winform控件总结

    1. C# WinForm控件.自定义控件整理(大全) (http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html) 2. c#窗体控件用 ...

  8. 在WPF中调用Winform控件

    最近在项目中用到了人脸识别和指纹识别,需要调用外部设备和接口,这里就用到了在WPF中调用Winform控件. 第一步,添加程序集引用.System.Windows.Forms和WindowsForms ...

  9. C# 扩展方法奇思妙用高级篇六:WinForm 控件选择器

    在Web开发中,jQuery提供了功能异常强大的$选择器来帮助我们获取页面上的对象.但在WinForm中,.Net似乎没有这样一个使用起来比较方便的选择器.好在我们有扩展方法,可以很方便的打造一个. ...

  10. WinForm控件使用文章收藏整理完成

    对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Lab ...

随机推荐

  1. 中文Markmap v2.0 现已上线,新增高效功能,老板再也留不住你下班的脚步!

    介绍 Markmap.js 是一款开源项目,在 GitHub 上获得了超过 1.7 万个星的关注,它的主要功能是将 Markdown 文档可视化为思维导图. 在日常使用中,用户经常需要面对老板的&qu ...

  2. Unity Mask原理及自定义遮罩

    主要内容 StencilBuffer是什么? 自定义Shader来实现遮罩 Unity Mask的原理 1.什么是StencilBuffer GPU在渲染前会为每个像素点分配一个1字节(8位)大小的内 ...

  3. oracle的order by 中文排序原理

    近期发现oracle的order by中文排序并不是完全按照拼音排序的 经过测试发现oracle的order by中文排序是按照中文的ASCII码排序的 查询字符ASCII码 select ascii ...

  4. react-router-dom嵌套路由实践

    想要通过react-router-dom实现类似vue的router-view的嵌套路由效果,在点击导航菜单时切换页面,官方文档是真的没找到相关内容,现做个总结: 在createBrowserRout ...

  5. js移动端判断跳转

    js移动端判断跳转,只一行 默默收藏 if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobil ...

  6. 通过SpringBoot配置文件配置Druid数据源

    目录 引入坐标依赖 配置application.properties文件 新建一个controller观察使用的是哪一个数据源 在SpringBoot 1.X 中,spring-boot-starte ...

  7. dashboard部署

    1.下载dashboard资源请单 wget  https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/re ...

  8. RISC-V指令精讲(一):算术指令--加法指令、比较指令

    本节来看下RV32I(32位整数指令集)的算数指令,先学习下加减指令(add.sub),接着了解下数值比较指令(slt),这些指令都有两个版本:一个是立即数版本,一个是寄存器版本 RISCV-V指令格 ...

  9. 网络编程:阻塞I/O和进程模型

    父进程和子进程 进程是程序执行的最小单位,一个进程有完整的地址空间.程序计数器等,如果想创建一个新的进程,使用函数 fork 就可以 pid_t fork(void) 返回:在子进程中为0,在父进程中 ...

  10. 把iview的table做成更适合展现大量数据的样式(字体变小、去除多余的padding等)

    <style> .ivu-table { font-size: 12px !important; } .ivu-table-header thead tr th { padding: 0p ...