c#中Winform上实现Ajax效果自定义按钮

  

<>强技术看点

  
      <李>,WinForm自定义控件的使用李   <李>自定义控件gif动画的播放李   
  

<强>需求及效果

  

又来一波c# GDI自定义控件。这个控件已经使用几年了,最近找出来重构一下。原来是没有边框的,那么导致导航的功能不是很突出。本来想加个效果:在执行单击时显示加载动画,在执行完单击事件后恢复原样。这就是网页里见到的局部刷新,Ajax常用的场景。需求来自几年前一个智能储物柜项目,人机界面有个美工设计好的效果图,为了省事和通用,需要一个透明的按钮来实现导航的任务。就是控件只是设计时可见,运行时不可见。

  

 C #中Winform上实现Ajax效果自定义按钮

  

 C #中Winform上实现Ajax效果自定义按钮

  

,  C #中Winform上实现Ajax效果自定义按钮

  

关键点说明

  

1), GraphicsPath实现矩形的圆角羽化处理

        使用(GraphicsPath路径=new GraphicsPath ())   {   #地区羽化,圆角处理   path.StartFigure ();   路径。(新点(矩形AddArc(新矩形。X, rect.Y),新的大小(2 *半径,半径2 *)),180年,90年);   路径。AddLine(新的点(矩形。X +半径,rect.Y),新观点(矩形。正确的半径,rect.Y));   路径。(新点(矩形AddArc(新矩形。右- 2 *半径,rect.Y),新的大小(2 *半径,半径2 *)),270年,90年);   路径。AddLine(新的点(矩形。rect.Y +半径),新观点(矩形。右,rect.Bottom -半径);   路径。(新点(矩形AddArc(新矩形。右- 2 *半径,rect.Bottom - 2 *半径),新的大小(2 *半径,半径2 *)),0,90);   路径。AddLine(新的点(矩形。正确的半径,rect.Bottom),新观点(矩形。X +半径,rect.Bottom));   路径。(新点(矩形AddArc(新矩形。X, rect.Bottom - 2 *半径),新的大小(2 *半径,半径2 *)),90年,90年);   路径。AddLine(新的点(矩形。X, rect.Bottom -半径),新观点(矩形。X, rect.Y +半径));   path.CloseFigure ();   # endregion      之前      要点就是画几段弧线和矩形连接起来。透明就是用了Color.FromArgb加上透明度,然后填充GraphicsPath形成透明区域。         g。FillPath(新SolidBrush(颜色。FromArgb(153年,背景色)),路径);   之前      2),单窗体应用如何模块化,   

窗体只有一个,但操作界面好多个,由于是无人值守的应用。那么老是切换窗体操作是非常不方便的。工作区域是一个容器面板,把每个操作界面定义成一个小组作为只容器。

        公共部分类DepositBizPanel:用户控件   {   私人BackgroundStyle BackgroundStyle=BackgroundStyle.Green;///& lt; summary>///主题风格///& lt;/summary>   公共BackgroundStyle BackgroundStyle   {   {回报backgroundStyle;}   集   {   backgroundStyle=价值;   开关(值)   {   案例GreenlandExpressBox.BackgroundStyle.Blue:   BackgroundImage=Properties.Resources.jbblue;   打破;   案例GreenlandExpressBox.BackgroundStyle.Orange:   BackgroundImage=Properties.Resources.jborange;   打破;   案例GreenlandExpressBox.BackgroundStyle.Green:   BackgroundImage=Properties.Resources.jbgreen;   打破;   }   无效();   }   }      公共盘ParentPanel   {   得到;   设置;   }      公共位图QR_Barcode   {   {回报(位图)pbxBarcode.Image;}   {pbxBarcode设置。形象=价值;}   }      公共DialogResult PanelDiagResult   {   得到;   设置;   }      公共DepositBizPanel(面板家长,位图条形码,BackgroundStyle风格)   {   InitializeComponent ();   DoubleBuffered=true;   ParentPanel=父母;   QR_Barcode=条形码;   BackgroundStyle=风格;   }      私人空间btnback_Click(对象发送方,EventArgs e)   {   在ParentPanel.Controls foreach(控制面板)   {   如果DepositBizPanel(面板)   {   ParentPanel.Controls.Remove(面板);   PanelDiagResult=DialogResult.Cancel;   打破;   }   }   }      私人空间btnprocessnext_Click(对象发送方,EventArgs e)   {   在ParentPanel.Controls foreach(控制面板)   {   如果DepositBizPanel(面板)   {   ParentPanel.Controls.Remove(面板);   PanelDiagResult=DialogResult.OK;   打破;   }   }   }   }   

c#中Winform上实现Ajax效果自定义按钮