[C#]绘制自定义窗体
标签:
去windows除边框初始窗口样式:
将窗口FormBorderStyle属性设为None,就可以去除四周边框
此时窗口将成为什么也没有的一个白板。
标题栏 标题栏拖一个panel控件到窗体上,设置背景图片,,作为标题栏。
窗口图标和主题用一个PictureBox作为Logo,导入图片,并将BackColor属性设为Transparent。
用一个Label作为窗口主题,不妨就把Text值设为窗口,BackColor属性设为Transparent。
最小化、关闭按钮(1)设置按钮样式
首先,拖两个PictureBox控件到标题栏;
然后分别为两个PictureBox的Image设置最小化、关闭按钮的图片;
将BackColor的属性设为Transparent。
此时,窗口的效果如下:
注:刚开始,我使用的是Button控件作为最小化、关闭按钮。但是不知为什么,有时候按钮周围会出现边框,且无法消除,所以改用PictureBox代替。
有兴趣的朋友可以试一试这个方法:
将Button的Text值清除;为Button的Image导入一个对应图片(如果要和背景色对应上,最好是透明图片);将Button的BackColor属性设为Transparent;将FlatStyle属性设为Flat,
MouseDownBackColor和MouseOverBackColor属性都设为Transparent,并将BorderSize设为0.
标题栏的相关事件基本样式似乎差不多了,但是因为我们隐去了windows默认窗体的标题栏,所以不能拖拽窗口,也不能最小化、关闭窗口。
那么,好吧,我们自己来动手写。
拖拽窗体为标题栏,也就是我们前面添加的Panel控件添加MouseDown和MouseMove两个事件。
然后根据鼠标的位置动态刷新窗体的位置。
代码如下:
private Point offset;
private void panelTitleBar_MouseDown(object sender, MouseEventArgs e)
{
if (MouseButtons.Left != e.Button) return;
Point cur = this.PointToScreen(e.Location);
offset = new Point(cur.X - this.Left, cur.Y - this.Top);
}
private void panelTitleBar_MouseMove(object sender, MouseEventArgs e)
{
if (MouseButtons.Left != e.Button) return;
Point cur = MousePosition;
this.Location = new Point(cur.X - offset.X, cur.Y - offset.Y);
}
为最小化按钮,也就是我们添加的PictureBox添加点击事件。
一行代码搞定,设置窗体状态。
private void pictureBoxMinimize_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
为关闭按钮,添加点击事件。
关闭窗口,释放资源。
private void pictureBoxClose_Click(object sender, EventArgs e)
{
this.Close();
this.Dispose();
}
至此,一个简陋的窗体需要的基本功能就完成了。
绘制边框前面的窗体因为去除了windows窗体的自带边框,所以整个窗体没有边框,显示的时候会有些奇怪,尤其是桌面背景色为白色的时候。
可以使用下面的方法绘制窗体边框
在窗体加载事件中需要将FormBorderStyle属性设为FormBorderStyle.FixedSingle。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66993.html