winform 移动窗口中的控件,panel
来源:互联网 发布:数控如何编程 编辑:程序博客网 时间:2024/05/22 05:01
from:http://www.codeproject.com/Articles/31840/Move-controls-on-a-form-at-runtime
thank the author a lot 。
本文是根据codeproject中的一个程序修改的。
可以实现,窗口中的控件鼠标拖动。really? yes
code:
一个form 。一个类:
form:
效果:
代码:
public partial class Frm_MoveControl : Form{private Cls_MoveControl MoveControl; public Frm_MoveControl(){ InitializeComponent(); MoveControl = new Cls_MoveControl(this);//this代表窗口,或者panel等容器 MoveControl.ApplyMove(button2); MoveControl.ApplyMove(button3, Cls_MoveControl.MoveDirection.Vertical); MoveControl.ApplyMove(button1,panel1,Cls_MoveControl.MoveDirection.Any);}}接下来是用于移动控件的类:
using System;using System.Collections.Generic;using System.Drawing;using System.Text;using System.Windows.Forms; namespace cacheDemo1{class Cls_MoveControl{public enum MoveDirection{ Any, Horizontal, Vertical}private int int_FrmWidth=200;private int int_FrmHeight = 200;public int Int_FrmWidth{ get { return int_FrmWidth; } set { int_FrmWidth = value; }}public int Int_FrmHeight{ get { return int_FrmHeight; } set { int_FrmHeight = value; }}public Cls_MoveControl(int width,int height){ this.int_FrmWidth = width; this.int_FrmHeight = height;}//这里如果传进来的只是窗口可以用form。当然也可以用Control类,因为Form也是派上于Control类public Cls_MoveControl(Control frm){ this.int_FrmWidth = frm.ClientRectangle.Width; this.int_FrmHeight = frm.ClientRectangle.Height; frm.Resize += delegate(object sender, EventArgs e) { this.int_FrmWidth = frm.ClientRectangle.Width; this.int_FrmHeight = frm.ClientRectangle.Height; };}/* * frm.ClientRectangle.Width;这里用ClientRectangle的原因 * 因为ClientRectangle可以得到窗口可用区域的大小, * 可以去掉窗口的标题栏的高度 * 这里写Control的好处是,可以传入Form。也可以穿容器控件,如panel */ public void ApplyMove(Control control){ ApplyMove(control, MoveDirection.Any);}public void ApplyMove(Control control, MoveDirection moveDirection){ ApplyMove(control, control, moveDirection);}public void ApplyMove(Control control, Control container, MoveDirection moveDirection){ bool isDrag = false; Point dragStartPoint = Point.Empty; control.MouseDown += delegate(object sender, MouseEventArgs e) { isDrag = true; dragStartPoint = new Point(e.X, e.Y); control.Cursor = Cursors.SizeAll; control.Capture = true; }; control.MouseUp += delegate(object sender, MouseEventArgs e) { isDrag = false; control.Cursor = Cursors.Default; control.Capture = false; }; control.MouseMove += delegate(object sender, MouseEventArgs e) { if (isDrag) //当鼠标有按下才会为true。一旦鼠标放开就为false { //横向移动的只能横向移动。纵向移动的只能纵向移动。 //任意方向的则都可以移动 if (moveDirection!=MoveDirection.Vertical) //horizontal和any可以进入 { int left=container.Left + e.X - dragStartPoint.X; // container.Left = Math.Max(0, left); //不要超过左边界 container.Left = GetMiddleValue(left,container.Width,this.int_FrmWidth); } if (moveDirection != MoveDirection.Horizontal) { int top = container.Top + e.Y - dragStartPoint.Y; // container.Top = Math.Max(0, top); container.Top = GetMiddleValue(top, container.Height, this.int_FrmHeight); } } };}/// <summary>/// 控制拖动的控件不要超出窗口/// </summary>/// <param name="val"></param>/// <param name="containerWOH"></param>/// <param name="FrmWidth"></param>/// <returns></returns>private int GetMiddleValue(int val,int containerWOH,int FrmWOH){ int min = 0; int max = FrmWOH - containerWOH; if (val<min) { val = min; } if (val>max) { val = max; } Console.WriteLine(val); return val;} }}
- winform 移动窗口中的控件,panel
- [VB.net][WinForm]Panel控件移动\鼠标拖动
- winform自定义panel控件
- winform移动窗体或窗体中的控件
- C# winform中使用Panel调节窗口变化是各控件的位置
- 关于winform中panel中控件不随滚动条移动的解决办法。
- winform 窗口移动
- C# WinForm解决Panel控件中的图片刷新时会闪烁的问题
- Asp.net中的Panel控件
- winform 移动窗体控件图解
- winform窗体中移动控件
- 如何给Winform 的Panel控件添加滚动条
- winform 中panel动态添加控件坐标原点问题
- winform 把 窗口添加进panel里面作为某一个窗口的子窗口
- Panel移动
- 移动Panel的滚动条到窗口中间
- 鼠标移动没有标题栏的winform窗口
- Winform隐藏标题栏后实现窗口移动
- YF项目SAP故障诊断问题
- Android开发中StackOverflowError错误实例分析
- 设计模式之创建型模式
- Visual C++ 编程命名规则总结
- Tomcat 6 Missing Host Header Internal IP Address Disclosure
- winform 移动窗口中的控件,panel
- 十二月23日
- C#读写数据库Image字段实例
- 变量存储方式——静态持续变量
- 刘伟XML——Schema
- c#复制文件
- MySql 集群配置
- oracle spfile&pfile 的作用 .
- response跳转的路径问题