- 浏览: 531605 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
C# 在运行中改变控件大小的类 并获取最后控件的大小收藏
使用方式
private Zgke.WindowFrom.Window.Controls.ControlMove _Move;
private void Form1_Load(object sender, EventArgs e)
{
_Move = new Zgke.WindowFrom.Window.Controls.ControlMove(dataGridView1);
_Move.Size = true; //是否能改变控件大小
_Move.Move = true; //是否能移动控件
_Move.Max = true; //是否能移动大于窗体的位置
_Move.Min = true; //是否能移动到窗体的最前面
_Move.MoveEnd += new Zgke.WindowFrom.Window.Controls.ControlMove.ControlMoveEnd(_Move_MoveEnd);
}
void _Move_MoveEnd(Control sender)
{
this.Text = sender.Location.ToString() + sender.Size.ToString();
}
全部类
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace Zgke.WindowFrom.Window.Controls
{
/// <summary>
/// 移动改变控件大小
/// zgke@sina.com
///qq: 116149
/// </summary>
public class ControlMove
{
#region 移动命令
private enum MoveCommand
{
None,
Move,
SizeLeft,
SizeRight,
SizeUp,
SizeDown,
SizeLeftUp,
SizeLeftDown,
SizeRightUp,
SizeRightDown
}
/// <summary>
/// 当前命令
/// </summary>
private MoveCommand m_MoveCommand = MoveCommand.None;
#endregion
private Control m_ParentControl;
private Control m_MoveControl;
private Point m_MousePoint = Point.Empty;
private Point m_MouseRight = Point.Empty;
private int m_SamillSizeTop = 3;
private int m_SamillSizeLeft = 5;
public ControlMove(Control p_MoveControl)
{
if (p_MoveControl.Parent == null) return;
m_ParentControl = p_MoveControl.Parent;
m_MoveControl = p_MoveControl;
p_MoveControl.MouseDown += new MouseEventHandler(p_MoveControl_MouseDown);
p_MoveControl.MouseLeave += new EventHandler(p_MoveControl_MouseLeave);
p_MoveControl.MouseMove += new MouseEventHandler(p_MoveControl_MouseMove);
p_MoveControl.MouseUp += new MouseEventHandler(p_MoveControl_MouseUp);
System.Reflection.PropertyInfo _BorderStyleInfo = p_MoveControl.GetType().GetProperty("BorderStyle");
if (_BorderStyleInfo == null) return;
try
{
if ((BorderStyle)_BorderStyleInfo.GetValue(p_MoveControl, new object[] { }) == BorderStyle.Fixed3D) m_SamillSizeLeft = 8;
}
catch
{
}
}
void p_MoveControl_MouseUp(object sender, MouseEventArgs e)
{
m_MoveCommand = MoveCommand.None;
m_MoveControl.Cursor = Cursors.Hand;
if (MoveEnd != null) MoveEnd(m_MoveControl);
}
void p_MoveControl_MouseMove(object sender, MouseEventArgs e)
{
if (m_MoveCommand == MoveCommand.None)
{
GetCursor(new Point(e.X, e.Y));
return;
}
switch (m_MoveCommand)
{
case MoveCommand.Move:
int _PointX = m_MousePoint.X - e.X;
int _PointY = m_MousePoint.Y - e.Y;
if (m_Min)
{
if (m_MoveControl.Location.X - _PointX <= 0) _PointX = 0;
if (m_MoveControl.Location.Y - _PointY <= 0) _PointY = 0;
}
if (m_Max)
{
if (m_MoveControl.Location.X - _PointX + m_MoveControl.Width >= m_ParentControl.Width) _PointX = 0;
if (m_MoveControl.Location.Y - _PointY + m_MoveControl.Height >= m_ParentControl.Height) _PointY = 0;
}
m_MoveControl.Location = new Point(m_MoveControl.Location.X - _PointX, m_MoveControl.Location.Y - _PointY);
break;
#region 上下左右
case MoveCommand.SizeRight:
if ((m_MoveControl.Width + e.X - m_MousePoint.X) < 10) break;
if (m_Max)
{
int _Max = (m_MoveControl.Width + e.X - m_MousePoint.X) + m_MoveControl.Location.X;
if (_Max >= m_ParentControl.Width) break;
}
m_MoveControl.Width = m_MoveControl.Width + e.X - m_MousePoint.X;
m_MousePoint.X = e.X;
m_MousePoint.Y = e.Y;
break;
case MoveCommand.SizeDown:
if ((m_MoveControl.Height + e.Y - m_MousePoint.Y) < 10) break;
if (m_Max)
{
int _Max = (m_MoveControl.Height + e.Y - m_MousePoint.Y) + m_MoveControl.Location.Y;
if (_Max >= m_ParentControl.Height) break;
}
m_MoveControl.Height = m_MoveControl.Height + e.Y - m_MousePoint.Y;
m_MousePoint.X = e.X;
m_MousePoint.Y = e.Y;
break;
case MoveCommand.SizeUp:
if ((m_MoveControl.Height - (e.Y - m_MousePoint.Y)) < 10) break;
if (m_Min)
{
int _Mix = m_MoveControl.Top + (e.Y - m_MousePoint.Y);
if (_Mix < 0) break;
}
m_MoveControl.Top = m_MoveControl.Top + (e.Y - m_MousePoint.Y);
m_MoveControl.Height = m_MoveControl.Height - (e.Y - m_MousePoint.Y);
break;
case MoveCommand.SizeLeft:
if ((m_MoveControl.Width - (e.X - m_MousePoint.X)) < 10) break;
if (m_Min)
{
int _Mix = m_MoveControl.Left + e.X - m_MousePoint.X;
if (_Mix < 0) break;
}
m_MoveControl.Left = m_MoveControl.Left + e.X - m_MousePoint.X;
m_MoveControl.Width = m_MoveControl.Width - (e.X - m_MousePoint.X);
break;
#endregion
#region 四角
case MoveCommand.SizeLeftUp:
int _Left = m_MoveControl.Left + e.X - m_MousePoint.X;
int _Top = m_MoveControl.Top + (e.Y - m_MousePoint.Y);
int _Width = m_MoveControl.Width - (e.X - m_MousePoint.X);
int _Height = m_MoveControl.Height - (e.Y - m_MousePoint.Y);
if (_Width < 10) //这里如果错误 换成直接返回break
{
_Width = 10;
_Left = m_MoveControl.Left;
}
if (_Height < 10)
{
_Height = 10;
_Top = m_MoveControl.Top;
}
if (m_Min)
{
if (_Left < 0)
{
_Left = 0;
_Width = m_MoveControl.Width;
}
if (_Top < 0)
{
_Top = 0;
_Height = m_MoveControl.Height;
}
}
m_MoveControl.Left = _Left;
m_MoveControl.Top = _Top;
m_MoveControl.Width = _Width;
m_MoveControl.Height = _Height;
break;
case MoveCommand.SizeRightDown:
if ((m_MoveControl.Width + e.X - m_MousePoint.X) < 10) break;
if ((m_MoveControl.Height + e.Y - m_MousePoint.Y) < 10) break;
if (m_Max)
{
int _Max = (m_MoveControl.Height + e.Y - m_MousePoint.Y) + m_MoveControl.Location.Y;
if (_Max >= m_ParentControl.Height) break;
_Max = (m_MoveControl.Width + e.X - m_MousePoint.X) + m_MoveControl.Location.X;
if (_Max >= m_ParentControl.Width) break;
}
m_MoveControl.Width = m_MoveControl.Width + e.X - m_MousePoint.X;
m_MoveControl.Height = m_MoveControl.Height + e.Y - m_MousePoint.Y;
m_MousePoint.X = e.X;
m_MousePoint.Y = e.Y; //'记录光标拖动的当前点
break;
case MoveCommand.SizeRightUp:
if ((m_MoveControl.Width + (e.X - m_MousePoint.X)) < 10) break;
if ((m_MoveControl.Height - (e.Y - m_MouseRight.Y)) < 10) break;
if (m_Min)
{
if ((m_MoveControl.Top + (e.Y - m_MouseRight.Y)) < 0) break;
}
m_MoveControl.Top = m_MoveControl.Top + (e.Y - m_MouseRight.Y);
m_MoveControl.Width = m_MoveControl.Width + (e.X - m_MousePoint.X);
m_MoveControl.Height = m_MoveControl.Height - (e.Y - m_MouseRight.Y);
m_MousePoint.X = e.X;
m_MousePoint.Y = e.Y; //'记录光标拖动的当前点
break;
case MoveCommand.SizeLeftDown:
if ((m_MoveControl.Width - (e.X - m_MouseRight.X)) < 10) break;
if ((m_MoveControl.Height + e.Y - m_MousePoint.Y) < 10) break;
if (m_Min)
{
if ((m_MoveControl.Left + e.X - m_MouseRight.X) < 0) break;
}
if (m_Max)
{
int _Max = (m_MoveControl.Height + e.Y - m_MousePoint.Y) + m_MoveControl.Location.Y;
if (_Max >= m_ParentControl.Height) break;
}
m_MoveControl.Left = m_MoveControl.Left + e.X - m_MouseRight.X;
m_MoveControl.Width = m_MoveControl.Width - (e.X - m_MouseRight.X);
m_MoveControl.Height = m_MoveControl.Height + e.Y - m_MousePoint.Y;
m_MousePoint.X = e.X;
m_MousePoint.Y = e.Y; //'记录光标拖动的当前点
break;
#endregion
}
}
void p_MoveControl_MouseLeave(object sender, EventArgs e)
{
m_MoveControl.Cursor = Cursors.Default;
}
void p_MoveControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
m_MoveCommand = GetCommand(new Point(e.X, e.Y));
m_MousePoint = new Point(e.X, e.Y);
m_MouseRight = new Point(e.X, e.Y);
switch (m_MoveCommand)
{
case MoveCommand.Move:
m_MoveControl.Cursor = Cursors.SizeAll;
break;
default:
break;
}
}
}
/// <summary>
/// 根据鼠标位置获取执行的命令
/// </summary>
/// <param name="p_MousePoint"></param>
private MoveCommand GetCommand(Point p_MousePoint)
{
#region 四角
if (p_MousePoint.X <= m_SamillSizeTop && p_MousePoint.Y <= m_SamillSizeTop) if (m_Size) return MoveCommand.SizeLeftUp;
if (p_MousePoint.X <= m_SamillSizeTop && p_MousePoint.Y >= m_MoveControl.Height - m_SamillSizeLeft) if (m_Size) return MoveCommand.SizeLeftDown;
if (p_MousePoint.X >= m_MoveControl.Width - m_SamillSizeLeft && p_MousePoint.Y <= m_SamillSizeTop) if (m_Size) return MoveCommand.SizeRightUp;
if (p_MousePoint.X >= m_MoveControl.Width - m_SamillSizeLeft && p_MousePoint.Y >= m_MoveControl.Height - m_SamillSizeLeft) if (m_Size) return MoveCommand.SizeRightDown;
#endregion
#region 上下左右
if (p_MousePoint.X <= m_SamillSizeTop) if (m_Size) return MoveCommand.SizeLeft;
if (p_MousePoint.Y <= m_SamillSizeTop) if (m_Size) return MoveCommand.SizeUp;
if (p_MousePoint.X >= m_MoveControl.Width - m_SamillSizeLeft) if (m_Size) return MoveCommand.SizeRight;
if (p_MousePoint.Y >= m_MoveControl.Height - m_SamillSizeLeft) if (m_Size) return MoveCommand.SizeDown;
#endregion
if (m_Move) return MoveCommand.Move;
return MoveCommand.None;
}
/// <summary>
/// 设置鼠标样式
/// </summary>
/// <param name="p_MousePoint"></param>
private void GetCursor(Point p_MousePoint)
{
MoveCommand _Command = GetCommand(p_MousePoint);
switch (_Command)
{
#region 四角
case MoveCommand.Move:
m_MoveControl.Cursor = Cursors.Hand;
return;
case MoveCommand.SizeLeftUp:
m_MoveControl.Cursor = Cursors.SizeNWSE;
return;
case MoveCommand.SizeLeftDown:
m_MoveControl.Cursor = Cursors.SizeNESW;
return;
case MoveCommand.SizeRightUp:
m_MoveControl.Cursor = Cursors.SizeNESW;
return;
case MoveCommand.SizeRightDown:
m_MoveControl.Cursor = Cursors.SizeNWSE;
return;
#endregion
#region 上下左右
case MoveCommand.SizeLeft:
m_MoveControl.Cursor = Cursors.SizeWE;
return;
case MoveCommand.SizeUp:
m_MoveControl.Cursor = Cursors.SizeNS;
return;
case MoveCommand.SizeRight:
m_MoveControl.Cursor = Cursors.SizeWE;
return;
case MoveCommand.SizeDown:
m_MoveControl.Cursor = Cursors.SizeNS;
return;
#endregion
}
}
#region 属性
private bool m_Move = true;
/// <summary>
/// 是否能移动控见
/// </summary>
public bool Move { get { return m_Move; } set { m_Move = value; } }
private bool m_Min = true;
/// <summary>
/// 是否移动到最小区域
/// </summary>
public bool Min { get { return m_Min; } set { m_Min = value; } }
private bool m_Max = true;
/// <summary>
/// 是否移动到最大区域
/// </summary>
public bool Max { get { return m_Max; } set { m_Max = value; } }
private bool m_Size = true;
/// <summary>
/// 是否能设置大小
/// </summary>
public bool Size { get { return m_Size; } set { m_Size = value; } }
#endregion
public delegate void ControlMoveEnd(Control sender);
public event ControlMoveEnd MoveEnd;
}
}
发表评论
-
CMPP短信网关客户端发送程序
2010-04-06 11:12 4717最近无聊,玩了玩ubuntu ... -
C#编程中的预处理指令
2010-01-13 11:22 1401在C#中, 虽然编译器没有单独的预处理器,但在处理预处理指令时 ... -
vs 打包winform程序步骤经验总结
2010-01-06 09:47 58451、 应用程序文件夹 : 在应用程序文件夹下新建一文件夹重名为 ... -
处理资源 'http://localhost/ws/Service.asmx' 时出错(iis,.netframework安装顺序造成的错)
2009-12-30 17:10 1909刚刚学习webservices,很多东西都不懂。写了个最简单的 ... -
图解在VS2005利用NUnit进行测试
2009-12-21 12:53 1555一、介绍NUnit是一款用于在.net环境进行单元测试的工具, ... -
如何编写单元测试用例(转载自CSDN)
2009-12-17 17:01 3162一、 单元测试的概念 ... -
NUnit2.0详细使用方法
2009-12-17 17:00 10685 .测试生命周期合约 如果记得test case的定义,其中 ... -
NUnit2.0详细使用方法
2009-12-17 16:58 11631、初识NUnitNUnit是一个开源单元测试框架,它提高一套 ... -
在.NET环境中使用单元测试工具Nunit
2009-12-17 16:56 1057简介编写单元测试是一 ... -
.NET命名空间使用介绍
2009-12-17 11:29 1712在ASP.NET中,.NET Framework为我们 ... -
一种清晰而又简单通用的分页算法
2009-12-17 10:03 6090分页,是WEB开发中面对的最常见的编程,实现方法多种多样。我也 ... -
C#数据结构-双向链表
2009-12-17 09:54 1957在结点中设两个引用域,一个保存直接前驱结点的地址,叫prev, ... -
读书笔记c#高级编程 委托和事件
2009-12-17 09:49 1097在C#中使用一个类时,分两个阶段。首先需要定义这个类,即告诉编 ... -
深入理解C#中的委托和事件:委托的定义
2009-12-16 16:04 1642委托和事件在 .Net Framework中的应用非常广泛,然 ... -
C#委托和事件(简单示例)
2009-12-16 15:46 38301.委派的实现过程。 首先来看一下委派,委派其实就是方法的传 ... -
关于配置文件的读取
2009-11-18 16:52 2069在1.0/1.1版本,都流行的 ... -
C# WInForm 无框窗体移动
2009-11-12 13:56 2014调用APIusing System.Runtime.Inter ... -
在C# 中如何动态地添加控件
2009-09-09 11:05 3648通常在写程序的时候 ... -
ListBox相互移动
2009-08-14 17:33 1430using System;using System.Colle ... -
TreeView-demo
2009-08-14 17:22 1318using System;using System.Co ...
相关推荐
C#实现运行时调整控件大小和位置,可以单击拖动控件到窗体任何位置,鼠标移动到控件边沿可以改变光标形状,按下鼠标左键后拖动可以改变控件大小,改变主窗体大小控件大小跟随
用c#编写的示例程序,可以单击或双击后拖动控件到窗体任何位置,鼠标移动到控件边沿可以改变光标形状,按下鼠标左键后拖动可以改变控件大小,改变主窗体大小控件大小跟随改变
c#语言 控件大小以及字体随窗口大小以及字体随窗口改变而自动缩放
下载后解压缩即可运行使用,代码...3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,首次记录窗体和其控件初始位置和大小,之后调用类的自适应方法,完成自适应。 4.Panel,DataGridView等控件同样适用。
C#鼠标拖动控件位置与改变大小
C# 自由改变控件大小
C#+运行时+控件拖动 C#+运行时+控件拖动
C#实现 改变控件大小 实现可拖动 在PictureBox中动态画图
c#在线程中使用控件时控件出现红叉解决方法.cs
C# winform 运行时用户拖动窗体上控件大小位置,可用于自定义窗体上控件排版
自定义控件,运行控件调整大小,控件外点击失去焦点,c#winform
C# winfrom获取当前焦点控件,有时候可能需要控制当前焦点控件是否是符合自己的要求而做其他动作.此代码可以获取到当前控件的类型名称
利用C#更专业的实现运行时调整控件大小和位置
让C#窗体中的控件、按钮以及菜单等随窗体的大小变化而变化,在Word中,大家会见到,当Word的窗体不是最大化的时候,那些操作按钮会自动隐藏起来,用箭头来代替,点击箭头会显示出被隐藏的按钮,那么这个窗体就实现...
C#中根据窗口分辨率大小,自动调整控件位置和大小的函数
C#获取其他程序ListView控件中的内容 http://blog.csdn.net/liehuo123/article/details/22043945
运行过程中,动态改变控件的大小和位置,已编译控件,
c#控件的移动,可通过鼠标拖动改变控件上下左右的大小及位置
主要介绍了C#实现根据指定容器和控件名字获得控件的方法,其中包括了遍历与递归的应用,需要的朋友可以参考下
c# 运行后移动和改变控件的大小 有兴趣的朋友可以看一下!直接运行就可以 还有封装好的DLL 和说明