这几天想绘制一组控件的边框,即:这一组控件默认有一个边框,鼠标移上去之后,边框变亮一点,鼠标点击一下,这组控件的边框就变为高亮状态(同时其他高亮边框的控件组恢复默认边框)。于是自己写了一个类,可以很方便的管理控件(组)的边框变换:控件(组)的大小发生变化时,边框的位置也能随之更新;同时加入了过渡效果,边框的变化是渐变的。这里就分享一下我的代码吧。
使用方法:
例如,上面的窗体界面中需要创建三个边框:
左边的dataGridView_Variables及下面的“刷新”、“提交”按钮button_Refresh、button_Commit分为一组,需要一个边框;
右上方的textBox_Receive及自己绘制的滚动条控件scrollBar_Receive为一组(滚动条紧贴着textBox_Receive的右侧,这里自动隐藏了,所以看不到),需要另外一个边框;
右下方的textBox_Send以及textBox_Send右侧的滚动条控件scrollBar_Send为一组(这个自绘的滚动条控件也自动隐藏了,所以看不到),需要第三个边框。
首先,在主窗体类public partial class MainWindow : Form 中添加一个局部变量:
private ControlBorderManager bordermanager = new ControlBorderManager();
然后,在form_load事件中添加如下初始化代码:
private void MainWindow_Load(object sender, EventArgs e)
{
bordermanager.AddControlGroup(
this,
new Control[] { textBox_Receive, scrollBar_Receive },
Color.FromArgb(80, 80, 80),
Color.FromArgb(150, 150, 150),
Color.FromArgb(41, 204, 41),
() =>
{
return new Rectangle(
textBox_Receive.Left - 1,
textBox_Receive.Top - 1,
textBox_Receive.Width + scrollBar_Receive.Width + 1,
textBox_Receive.Height + 1
);
});
bordermanager.AddControlGroup(
this,
new Control[] { textBox_Send, scrollBar_Send },
Color.FromArgb(80, 80, 80),
Color.FromArgb(150, 150, 150),
Color.FromArgb(41, 204, 41),
() =>
{
return new Rectangle(
textBox_Send.Left - 1,
textBox_Send.Top - 1,
textBox_Send.Width + scrollBar_Send.Width + 1,
textBox_Send.Height + 1
);
});
bordermanager.AddControlGroup(
this,
new Control[] { dataGridView_Variables, button_Refresh, button_Commit },
Color.FromArgb(80, 80, 80),
Color.FromArgb(150, 150, 150),
Color.FromArgb(41, 204, 41),
() =>