转:重绘panel边框方法

本文介绍了如何通过重绘事件实现.NET Panel控件类似Delphi/C++Builder的丰富边框效果,提供了一种自定义边框样式的实现方法,包括凸起和凹下的不同组合。
摘要由CSDN通过智能技术生成

今天搜索到这个帖子,赶紧收藏了~~

http://delphi.ktop.com.tw/board.php?cid=169&fid=1220&tid=101360

 

NET 的 Panel 控件非常陽春, 本以為升級到 VS2010 會不會增強一些屬性, 結果看起來跟 VS2003 的 Panel 完全一樣, 沒有改進 , 我還是用我習慣的 VS2003 就好了
.NET 的 Panel 控件外觀只有三種樣式選擇 : BorderStyle = None (無外框) , FixedSingle (單線外框), Fixed3D (立體) , 而立體也只有凹下去的 Style, 沒有凸出來的 Style ; 圖中最上面三種樣式即為標準的 .NET Panel 控件樣式
 
我們今天來實作可以像 Delphi / C++Builder 中的 Panel 有更多的外觀 , 也就是圖中下面六種樣式, 看起來是否更活潑呢 ? 



■ 實作方法
在 Panel 控件的 OnPaint (重繪事件) 中畫出我們要的外框, 為了要讓各個 Panel 都可任意設定自己的外框, 又不想在每個 Panel 控件的 OnPaint (重繪事件) 寫一大堆 CODE , 所以我把共用的 CODE 包成一獨立函式  Custmer_PanelPaint() , 透過傳入參數的不同, 決定外框式樣, 以後有時間再把它包成控件
 
■ 重繪函式

傳入參數
BevelOuter        1:Panel外框為凸起  2:Panel外框為凹下
BevelInner        1:Panel內框為凸起  2:Panel內框為凹下  0:無內框  
BorderWidth       Panel 外框與內框之間距寬度

例 : 於 Panel 之 OnPaint 事件中 呼叫 Custmer_PanelPaint(sender, e, 2, 1, 1);
      表 外框為凹下, 內框為凸起, 內外框間距為 1


  1. private void Custmer_PanelPaint(object sender, System.Windows.Forms.PaintEventArgs e, int BevelOuter, int BevelInner, int BorderWidth)  
  2. {  
  3.     Panel pnl=(Panel)sender;  
  4.    
  5.     switch (BevelOuter*10+BevelInner)  
  6.     {  
  7.        case 10 : //外框為凸起; 無內框  
  8.        
  9.         //BevelOuter (bvRaised)  
  10.         e.Graphics.DrawLine(new Pen(SystemColors.ControlLightLight),0,0,0,pnl.Height-2);  //左  
  11.         e.Graphics.DrawLine(new Pen(SystemColors.ControlLightLight),0,0,pnl.Width-2,0);   //上  
  12.         e.Graphics.DrawLine(new Pen(SystemColors.ControlDark),pnl.Width-2,pnl.Height-2,0,pnl.Height-2); //下  
  13.         e.Graphics.DrawLine(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值