以前用delphi開發軟件的時候,如果需要在界面上放置一個分隔線,其自帶的tbevel可以很好地滿足這一要求。現在轉到了.net平臺,竟找不到對應的控件(畢竟每次在paint事件中畫太麻煩)。而如果用panel、groupbox、label來間接實現,效果不夠理想,并且感覺怪怪的。因此決定自己實現一個分隔線控件,效果如下圖所示:
在這里我只將核心代碼貼出來,關于創建自定義控件的相關知識可參考msdn:
ms-help://ms.vscc.2003/ms.msdnqtr.2003feb.2052/vbcon/html/vbconcontrolcreation.htm
/// <summary>
/// 水平分隔線
/// </summary>
[
toolboxbitmap(typeof(lineh), "res.lineh.ico"),
designer(typeof(linehdesigner))
]
public class lineh : system.windows.forms.usercontrol
{
//... ...
private void lineh_paint(object sender, system.windows.forms.painteventargs e)
{
graphics g = e.graphics;
rectangle r = this.clientrectangle;
pen darkpen = new pen(systemcolors.controldark, 1);
pen lightpen = new pen(color.white);
//用暗色調處理上邊緣
g.drawline(darkpen, r.left, r.top, r.right, r.top);
//用亮色調處理下邊緣
g.drawline(lightpen, r.left, r.top + 1, r.right, r.top + 1);
}
//... ...
}
/// <summary>
/// 垂直分隔線
/// </summary>
[
toolboxbitmap(typeof(linev), "res.linev.ico"),
designer(typeof(linevdesigner))
]
public class linev : system.windows.forms.usercontrol
{
//... ...
private void linev_paint(object sender, system.windows.forms.painteventargs e)
{
graphics g = e.graphics;
rectangle r = this.clientrectangle;
pen darkpen = new pen(systemcolors.controldark, 1);
pen lightpen = new pen(color.white);
//用暗色調處理左邊緣
g.drawline(darkpen, r.left, r.top, r.left, r.bottom);
//用亮色調處理右邊緣
g.drawline(lightpen, r.left + 1, r.top, r.left + 1, r.bottom);
}
//... ...
}
欲完全實現上圖所示效果,可參閱http://blog.csdn.net/doubon/archive/2005/01/18/258314.aspx。