小弟想实现类似于vs2005鼠标拖放控件,界面无闪烁的效果,望大侠指点!!
解决方案 »
- 在silverlight中的打印功能如何制作
- VB中的AddressOf在C#中如何描述呢
- C#可以用来进行图像处理吗
- Object.Equals和Object.ReferenceEquals有区别吗?
- ???这里人多,问个sql server的问题
- 在线等待-未能获取此实现的 CryptoAPI 加密服务提供程序(CSP)。
- jmail 如何发送html格式 的邮件,并把一图片作为背景。。。请写出例子
- 请救 关于tacacs+ radius集成认证
- c#.net的字符串问题,困扰我很久了,希望大虾解决一下。
- 我想问一下,用C#编写的程序,是不是一定要在安装了.netframework的系统上面运行呢??
- 请教一个jquery的问题
- 请教问题
使用双缓存
开始拖放时隐藏控件,绘制矩形框代替控件视图,拖放结束还原。
2.使用运行时设计器。DesignSurface、IDesignerHost等创建设计界面后,控件拖放和改变大小,设计器已经实现了该类功能。
[email protected]
万分感谢
{
Control ctl;
Control parent;
bool moving;
Point startPos;//控件起始的位置
Size oldSize; //控件初始大小 Point mouseDownPos;//鼠标按下时所在位置
Point curPos;//改变后的控件位置
Bitmap img;//控件绘制到图片(控件的SizeMode不是AutoSize时,需要绘制)
//绑定事件,用户可以开始移动控件
public void BindCtlMove(Control ctl)
{
this.ctl = ctl;
parent = ctl.Parent; img = new Bitmap(ctl.Width, ctl.Height); ctl.MouseDown += new MouseEventHandler(ctl_MouseDown);
ctl.MouseMove += new MouseEventHandler(ctl_MouseMove);
ctl.MouseUp += new MouseEventHandler(ctl_MouseUp); parent.Paint += new PaintEventHandler(parent_Paint);
} //取消移动
public void Cancel()
{
ctl.MouseDown -= new MouseEventHandler(ctl_MouseDown);
ctl.MouseMove -= new MouseEventHandler(ctl_MouseMove);
ctl.MouseUp -= new MouseEventHandler(ctl_MouseUp);
if (parent != null)
{
parent.Paint -= new PaintEventHandler(parent_Paint); }
} void parent_Paint(object sender, PaintEventArgs e)
{
if (moving)
{
e.Graphics.DrawImage(img, curPos);
}
} void ctl_MouseUp(object sender, MouseEventArgs e)
{
moving = false;
ctl.Location = curPos;
ctl.Size = oldSize;
} void ctl_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
curPos = new Point(mouseDownPos.X + e.X - startPos.X, mouseDownPos.Y + e.Y - startPos.Y);
this.parent.Invalidate();
} } void ctl_MouseDown(object sender, MouseEventArgs e)
{
mouseDownPos = ctl.Location;
startPos = e.Location;
ctl.DrawToBitmap(img, ctl.ClientRectangle);
moving = true;
oldSize = ctl.Size;
ctl.Size = Size.Empty;
}
}