主要介绍自绘窗体边框和背景颜色逐级变浅(深)。
1.先设置窗体为无边框模式
this.formborderstyle = system.windows.forms.formborderstyle.none;
也可以右击窗体,选择属性,找到formborderstyler设置为none。此时窗体右上角的最小化、最大化和关闭按钮会消失,鼠标拖动窗体的功能也会消失,这些会在第4步添加。
2.绘制边框
选择当前项目右击,添加组件,让组件类component1继承panel类,然后重写onpaint(painteventargs e),绘制边框颜色。生成解决方案,该组件会自动添加到工具箱里,组件栏下。类代码如下:
public partial class component1 : panel
{ public component1()
{
initializecomponent();
} public component1(icontainer container)
{
container.add(this);
initializecomponent();
} protected override void onpaint(painteventargs e)
{
controlpaint.drawborder(e.graphics, this.clientrectangle,
color.fromargb(00,59,96), 2,
buttonborderstyle.solid,
color.fromargb(00,59,96), 2,
buttonborderstyle.solid,
color.fromargb(00,59,96), 2,
buttonborderstyle.solid,
color.fromargb(00,59,96), 2,
buttonborderstyle.solid); base.onpaint(e);
}
}
color.fromargb(00,59,96)设置边框颜色,2设置边框尺寸。
注:如果不知道设置什么rgb值,使得颜色好看。可以去网上下载一个屏幕取色器,读出你认为好看颜色的rbg值。
3.添加边框
将组件component1添加到窗体,设置其dock属性为fill。然后设置padding属性为2,2,2,2(与边框尺寸对应)。也可以动态实现,代码如下:
this.component11.dock = system.windows.forms.dockstyle.fill;
this.component11.padding = new system.windows.forms.padding(2);
4.添加窗体关闭、最小化,鼠标拖动功能
在窗体组件this.component11上,添加panel,设置其dock属性为top,自定义背景颜色为0,102,171,前景色为transparent。
this.panel1.dock = system.windows.forms.dockstyle.top;
this.panel1.backcolor = system.drawing.color.fromargb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(171)))));
this.panel1.forecolor = system.drawing.color.transparent;
然后在pannel上添加两个label,设置其text分别为__和x,为最小化和最大化图标。字体设置为微软雅黑、粗体、小五号。最后给pannel添加mousedown和mousemove事件。给label添加click事件,添加mouseenter和mouseleave事件,使得鼠标移动到图标上时,鼠标变为手型。
point mouseoffset;private void panel1_mousedown(object sender, mouseeventargs e)
{
mouseoffset = new point(-e.x, -e.y);
}private void panel1_mousemove(object sender, mouseeventargs e)
{ if (e.button == mousebuttons.left)
{
point mouseposition = control.mouseposition;
mouseposition.offset(mouseoffset.x, mouseoffset.y);
location = mouseposition;
}
}private void labelminimize_click(object sender, eventargs e)
{ this.windowstate = formwindowstate.minimized;
}private void labelclose_click(object sender, eventargs e)
{ this.close(); this.dispose();
application.exit();
}private void labelminimize_mouseenter(object sender, eventargs e)
{ this.cursor = cursors.hand;
}private void labelminimize_mouseleave(object sender, eventargs e)
{ this.cursor = cursors.default;
}private void labelclose_mouseenter(object sender, eventargs e)
{ this.cursor = cursors.hand;
}private void labelclose_mouseleave(object sender, eventargs e)
{ this.cursor = cursors.default;
}
5.panel背景色设置为逐级变淡
给pannel添加paint事件。
private void panel1_paint(object sender, painteventargs e)
{ int y, dy;
y = this.panel1.clientrectangle.location.y;
dy = this.panel1.clientrectangle.height / 90; for (int i = 0; i <= 89;i++ )
{
color c = new color(); //调用color对象的fromargb方法
c = color.fromargb(50, i + 50, i + 120);//0,102,171
solidbrush sb = new solidbrush(c);
pen p = new pen(sb, 1); //绘制矩形
e.graphics.drawrectangle(p, this.panel1.clientrectangle.x, y, this.width, y + dy);
y = y + dy; //i++;
}
}
以上就是从0自学c#01–自绘窗体边框的内容。