上一篇:在 ASP.NET 中执行 URL 重写 >>
窗体标题栏外的拖动操作
(作者:张均洪) 2004-9-3
我们知道对窗体的拖动只需要点住标题栏,拖动鼠标就可以了.但有些时候我们想在窗体的标题栏外的区域实行拖动窗体的操作.这时就要需要我们自已写些代码了,下面是我的做法,供大家参观.
新建一个窗体FORM1,并放入两个RADIOBUTTON控件,第一个是确定是否窗体拖动,第三个是确定是否指定某一区域进行窗体拖动.
以下是窗体代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1
{
partial class Form1 : Form
{
Point _StartXY; //鼠标按下的位置
bool _MoveDown=false; //鼠标是不是按下了
//指定一个区域,好写字在ONPAINT中
Rectangle _rec = new Rectangle(50, 50, 70, 70);
public Form1()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
//要移动吗?由按下鼠标(onMouseDown)确定哈
bool OktoMove=false;
base.OnMouseDown(e);
if(this.radioButton1.Checked)
{
OktoMove=true;
}
else
{
//如果按下鼠标的点坐标在_rec指定的区域内
//那么我们同意移动窗体操作哈。
if(this._rec.Contains(this.PointToClient(MousePosition)))
{
OktoMove = true;
}
}
//如果同意移动,就把按下鼠标一瞬的坐标给_StartXY
//并同意按着鼠标移动。
if(OktoMove==true)
{
//把当前的鼠标位置赋给变量
_StartXY = MousePosition;
_MoveDown = true;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
//如果同意按着鼠标移动,就把移动的量给变量
//以便窗体按你的量移动。
if (_MoveDown)
{
int Xdiff,Ydiff;
Xdiff = MousePosition.X - _StartXY.X;
Ydiff = MousePosition.Y - _StartXY.Y;
//改变窗体位置
this.Left = this.Left + Xdiff;
this.Top = this.Top + Ydiff;
//把新位置给_StartXY变量了哈
_StartXY = MousePosition;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
_MoveDown = false;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//要一支新画笔,向NET要哈
SolidBrush b = new SolidBrush(Color.Red);
if (radioButton2.Checked)
{
//填充_rec的区域,笔的颜色是红的哈
e.Graphics.FillRectangle(b, _rec);
//改变笔的颜色
b.Color = Color.White;
//重新定义一个区域,这个区域其实就是_rec变量的区域
RectangleF recF = new RectangleF(_rec.X,
_rec.Y,
_rec.Width,
_rec.Height);
//在这个区域写几个字呢
e.Graphics.DrawString("click on me drag", Font, b, recF);
}
else
{
//如果不同意用区域改变窗体位置,就把背景设为窗体的
//颜色,免得影响视觉。
b.Color = BackColor;
//把这个区域涂了
e.Graphics.FillRectangle(b, _rec);
}
b.Dispose();//把笔丢了,免得占我地方
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
this.Invalidate(this._rec);//使_rec指定的地方无效了
}
}
}
下一篇:Asp.net页面输出到EXCEL >>
相关文章:
- · 高效开发Asp.net教程
- · MetaBuilders在ASP.NET FORUMS2.0中的应用方法
- · 坚持学asp.net——(四)
- · 浅析ASP.NET FORUMS中缓存机制的应用
- · 在 WinForm 中完整支持在多级目录中保存的 ASP.NET
- · 坚持学asp.net——(三)
- · 用IronPython写winform程序
- · 坚持学asp.net——(二2)
- · ASP.NET分页组件学与用——使用篇
- · ASP.NET分页组件学与用——教学篇(源代码)
- · ASP.NET分页组件学与用——教学篇
- · ASP.NET FORUMS换肤流程
- · ASP.NET 中 Session 实现原理浅析 [2] 状态管理器
- · ASP.NET 中 Session 实现原理浅析 [1] 会话的建立流程
- · 遍历ASP.NET页面控件
- · 采用UDP广播模式写简单信息传输工具~
- · Different event log entries that are generated by ASP.NET
- · 检测是否还有黑客代码的asp.net函数
- · asp.net上传图片并同时生成缩略图
- · 用Asp.net实现新闻分页
- · .NET中获取电脑名,IP地址
- · 每个.Net开发人员应该下载的十种必备工具
- · 专访微软ASP.NET产品项目负责人
- · ASP.NET数据格中计算数值总和
- · ASP.NET DataGrid 控件深入研究
- · ASP.NET 应用程序
- · ASP.NET中利用cookies保持客户端信息
- · asp.net用户注册时的验证
- · 浅谈Asp.net多层架构中的变量引用与传递
- · 在ASP.NET使用javascript的一点小技巧
- · 关于ASP.NET下身份信息的保存(三)
- · ASP.NET 2.0,写无限级下拉菜单不再难!!
- · Asp.net组件设计浅论
- · ASP.NET Tips1---合并多个字段值
- · ASP.NET中使用Server.Transfer()方法在页间传值
- · (ASP.NET)修改和删除DataGrid行——数据库访问
- · .Net的Outofmemory异常及大内存使用
- · 从 ASP.NET 服务器控件插入客户端脚本(引自MSDN中文网站)
