您好,欢迎访问一九零五行业门户网

从0自学C#01–自绘窗体边框

主要介绍自绘窗体边框和背景颜色逐级变浅(深)。
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–自绘窗体边框的内容。
其它类似信息

推荐信息