一:窗体的移动
1、去掉边框:
在winform里边窗体的显示格式就几种,并且都是固定不变的,不能显示自己想要的效果,所以,现在就介绍一下我的窗体美化方式。想要自己的窗体效果,就必须先去掉winform自己的窗体边框,所以修改FormBorderStyle的属性为None,然后就去掉边框了,那么,我们会发现,运行后的窗体不能移动了。很好,接下来就是我重点要说的———窗体的移动。
2、用到的方法:
想让窗体移动就不免要用窗体的三个方法:MouseMove方法,MouseDown方法和MouseUp方法;
3、三个方法的联合使用:
第一:MouseDown首先获得窗体和鼠标,从而才能把鼠标和窗体绑定在一起为先一步做准备了;
第二:MouseMoe是让窗体移动的关键,第一步把窗体和鼠标绑定,那么,只要用此方法每时每刻记录鼠标的移动路径就可以让窗体移动了;
第三:MouseUp是设置鼠标左键抬起的,释放窗体和鼠标的绑定,并且判定是左键按下还是右键按下;
4、代码展示:
首先要有 两个全局变量来建立三个方法的连接:
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
具体方法:
public void Mousedown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
//获取整个窗口在环境中的位置
xOffset = -e.X - SystemInformation.FrameBorderSize.Width + 10;
yOffset = -e.Y - SystemInformation.CaptionHeight -
SystemInformation.FrameBorderSize.Height + 30;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
public void Mousemove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition; //获取光标的位置
mousePos.Offset(mouseOffset.X, mouseOffset.Y); //窗口的位置位移量
Location = mousePos;
}
}
public void Mouseup(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
二: 控件的美化
1、去掉了窗体边框,我们也可以让窗体移动了,但是问题又出来了,怎没关闭窗体,怎么最小最大化窗体啊?所以就用到了控件,用按钮来实现它的一切效果了,要用按钮当然少不了Button了,可是,Button的边框可窗体的搭配好不乐观,去掉button的边框我们发现,这样的Button和Label没什么两样了,为了方便起见,我现在就用label了,来美化一下窗体的按钮 ,方法是有点不合理,但是挺好用的,它可以实现为Web一样的所有效果;
2、美化按钮用到的材料有和方法:想要效果图片,两个Label控件 ,label控件的MouseEnter方法,所在窗口的MouseMove方法;
3、制作步骤:
第一:把想要的窗体按钮背景放在窗体上,把其中一个lalel的image属性导入一个同样效果的图片,另一个label的BackColor属性设置为Tranthlation,把visible属性设置为true;
第二:用到MouseEnter方法;设置另一个label的Visibe属性为false;
第三:窗体的mouseMove方法可以收鼠标的移动位置,从而判断鼠标是否移动到了控件区域和离开了控件区域,只有把MouseEnter方法和MouseMove方法配合使用才可已达到想要的效果。具体代如下:
在MouseMove方法里写如下代码:
//判断光标是否进入控件区域,如果进入,使其显示
Rectangle rectangleClose = lblClose.RectangleToClient(this.ClientRectangle);
if (rectangleClose.Contains(MousePosition)) //判断制定区域是否把光标包含在内
lblClose.Visible = false;
else
lblClose.Visible = true;
在MouseEnter中写如下代码:lblShow.Visible=false;