C# 令某个窗体可跟着鼠标移动
/// <summary>
/// 使窗口的中的指定控件支持运行时移动
/// TODO:运行时缩放
/// </summary>
public class ControlMoveResize
{
#region 私有成员
bool IsMoving = false;
Point pCtrlLastCoordinate = new Point(, );
Point pCursorOffset = new Point(, );
Point pCursorLastCoordinate = new Point(, );
private Control ctrl = null;
private ScrollableControl Containe = null;
#endregion
#region 私有方法
/// <summary>
/// 在鼠标左键按下的状态记录鼠标当前的位置,以及被移动组件的当前位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MouseDown(object sender, MouseEventArgs e)
{
if (Containe == null)
{
return;
}
if (e.Button == MouseButtons.Left)
{
IsMoving = true;
pCtrlLastCoordinate.X = ctrl.Left;
pCtrlLastCoordinate.Y = ctrl.Top;
pCursorLastCoordinate.X = Cursor.Position.X;
pCursorLastCoordinate.Y = Cursor.Position.Y;
}
}
private void MouseMove(object sender, MouseEventArgs e)
{
if (Containe == null)
{
return;
} if (e.Button == MouseButtons.Left)
{
if (this.IsMoving)
{
Point pCursor = new Point(Cursor.Position.X, Cursor.Position.Y); pCursorOffset.X = pCursor.X - pCursorLastCoordinate.X; pCursorOffset.Y = pCursor.Y - pCursorLastCoordinate.Y;
ctrl.Left = pCtrlLastCoordinate.X + pCursorOffset.X;
ctrl.Top = pCtrlLastCoordinate.Y + pCursorOffset.Y;
} }
} private void MouseUp(object sender, MouseEventArgs e)
{
if (Containe == null)
{
return;
}
if (this.IsMoving)
{
if (pCursorOffset.X == && pCursorOffset.Y == )
{
return;
}
if ((pCtrlLastCoordinate.X + pCursorOffset.X + ctrl.Width) > )
{
ctrl.Left = pCtrlLastCoordinate.X + pCursorOffset.X;
}
else
{
ctrl.Left = ;
}
if ((pCtrlLastCoordinate.Y + pCursorOffset.Y + ctrl.Height) > )
{
ctrl.Top = pCtrlLastCoordinate.Y + pCursorOffset.Y;
}
else
{
ctrl.Top = ;
}
pCursorOffset.X = ;
pCursorOffset.Y = ;
}
}
#endregion
#region 构造函数
/// <summary>
/// 获取被移动控件对象和容器对象
/// </summary>
/// <param name="c">被设置为可运行时移动的控件</param>
/// <param name="parentContain">可移动控件的容器</param>
public ControlMoveResize(Control c, ScrollableControl parentContain)
{
ctrl = c;
this.Containe = parentContain;
ctrl.MouseDown += new MouseEventHandler(MouseDown);
ctrl.MouseMove += new MouseEventHandler(MouseMove);
ctrl.MouseUp += new MouseEventHandler(MouseUp);
}
#endregion
}
上面是类,以下是调用 的方法
传入的参数为:控件,控件容器(即窗体)
ControlMoveResize control = new ControlMoveResize(this.button1,this);
C# 令某个窗体可跟着鼠标移动的更多相关文章
- JS---案例:图标跟着鼠标飞(有bug)
案例:图标跟着鼠标飞(有bug) <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- JS---案例:图片跟着鼠标飞的最终版本
案例:图片跟着鼠标飞的最终版本 换了个好看的糖果照片,想给博客首页加上,但是加上后,应该是overwrite原来的html,所以光有鼠标跟着飞的效果,原来的功能都不能用了 放入common.js &l ...
- jQuery 图片跟着鼠标动
html默认鼠标样式改成图片时格式为 .ani 图片跟随鼠标挪动 html <div id="mouseImg"> <img src="images/问 ...
- Javascript实现让小图片一直跟着鼠标移动
Javascript实现让小图片一直跟着鼠标移动实例 注意:图片可能加载不出来,注意更换 <!doctype html> <html> <head> <met ...
- Javascript实现让图片一直跟着鼠标移动
Javascript实现让图片一直跟着鼠标移动 注意:图片可能加载不出来,还请及时更换图片 <!doctype html> <html> <head> <me ...
- js跟着鼠标移动的文字
废话不多说,直接上代码,有注释: <head> <title></title> <style type="text/css"> sp ...
- C#窗体越界时鼠标还能回到初始坐标位置
对窗体加越界限制后,鼠标拖动窗体越界时,窗体不能动,鼠标位置可动,但窗体不再越界时,鼠标位置还能回到鼠标按下时相对窗体的坐标:1.首先创建一个窗体Form1,然后在窗体上拖一个button1按钮(主要 ...
- MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化
无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...
- C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
随机推荐
- redis配置文件redis.conf参数说明
redis配置文件redis.conf参数说明 (2013-01-09 21:20:40)转载▼ 标签: redis配置 redis.conf 配置说明 杂谈 分类: nosql # By defau ...
- Git SourceTree 冲突解决方案
Git现在越来越火,很多人都从Svn迁移到Git上面,Git让我们更加与世界接轨,不再是"局域网"的程序猿,特别是掌握了Git之后,会发现它真的很好用,本文对Git中比较烦人的冲突 ...
- struts2 基础demo1
我们都知道 struts2 是基于webframework 出现的 优秀的mvc 框架, 他和struts1 完全没有联系.struts2 是一个框架, 啥叫框架呢?是一个优秀的半成品 . web的框 ...
- perl 从文件里读出变量无法使用解决办法
最近在写一个perl函数,把test case 放到配置文件里,读出来然后使用system运行. 我的本意是: 配置文件conf ping -c $count $ip #在主程序中定义$ip和$cou ...
- Sql Server事务简单用法
var conStr = "server=localhost;database=Data;user=sa;pwd=123456"; using (var connection = ...
- code vs 1026 逃跑的拉尔夫
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走 ...
- Android图片加载库:最全面的Picasso讲解
前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...
- 9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点
css3拓展: <display:none> 将某个元素隐藏 <visibility:hidden> 也是将某个元素隐藏 <display:block&g ...
- 108. Convert Sorted Array to Binary Search Tree
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- 无法解析的外部符号 __imp__InitCommonControlsEx@4
需要comctl32.lib 今天在codeproject上找到一个屏保程序,http://www.codeproject.com/Articles/1551/Creating-a-screen-sa ...