仿QQ面板举一反三之拉幕式窗口

mac2022-06-30  68

 设计昨天尝试了仿QQ面板的设计(具体请看:http://www.cnblogs.com/KenBlove/archive/2008/09/27/1300938.html ),今天忽然想如果将面板横着放,不就成了一个拉幕式的窗口了么?

说做就做.立即动手:

首先,和QQ面板不同的就是QQ面板设计当点击Module button的时候,会显示下一级的button.但是这次我们做的不同,应该显示不同的内容,道理大同小异.我们将在panel中加入usercontrol,至于usercontrol里面要显示什么内容,就随便你发挥了.

先看看最终界面吧:

点击右边相应button,则可以显示不同的usercontrol,形成初步的拉幕效果:

看完界面,我们来说说具体的实现吧.先在新建一个C# windows Application,拖拉相应的控件(重点是中间有一个panel控件,其余都是装饰),如图:

像做QQ面板一样,我先定义一些必要的变量和属性:

         private   string [] _Module;          private   int  _ModuleButtonWidth  =   25 ;          ///   <summary>          ///  初始模块          ///   </summary>          public   string [] Module         {              get  {  return  _Module; }              set  { _Module  =  value; }         }

定义好变量,我们开始写Form1_Load函数:

 

         private   void  Form1_Load( object  sender, EventArgs e)         {              this .panel1.BorderStyle  =  BorderStyle.None;              // 初始化             Module  =   new   string [] {  " 初始模块1 " " 初始模块2 " " 初始模块3 " " 初始模块4 " " 初始模块5 "  };              for  ( int  i  =   0 ; i  <  Module.Length; i ++ )             {                  // 增加模块Button                 Button btn  =   new  Button();                 btn.FlatStyle  =  FlatStyle.Popup;                 btn.Width  =  _ModuleButtonWidth;                 btn.Height  =   this .panel1.Height;                 btn.Name  =   string .Format( " Button{0} " , i.ToString());                 btn.Text  =  Module[i];                 btn.Left  =   this .panel1.Width  -  _ModuleButtonWidth  *  (Module.Length  -  i);                 btn.Click  +=   new  EventHandler(btn_Click);                  this .panel1.Controls.Add(btn);             }         }

就是将Button加到Panel中,很简单!下边开始写点击Button加载usercontrol的操作:

 

         private   void  btn_Click( object  sender, EventArgs e)         {              // 标志是否找到用户点击的Button              bool  findOutStatus  =   false ;              // 清除上一次操作加载的子菜单项              for  ( int  i  =   0 ; i  <   this .panel1.Controls.Count; i ++ )             {                  if  ( this .panel1.Controls[i].GetType().Name  ==   " Panel " )                 {                      this .panel1.Controls.RemoveAt(i);                 }             }              for  ( int  i  =   0 ; i  <   this .panel1.Controls.Count; i ++ )             {                  if  ( this .panel1.Controls[i].GetType().Name  ==   " Button " )                 {                      // 重新定义各个button位置                      if  ( ! findOutStatus)                     {                          this .panel1.Controls[i].Left  =  _ModuleButtonWidth  *  i;                     }                      else                     {                          this .panel1.Controls[i].Left  =   this .panel1.Width  -  _ModuleButtonWidth  *  (Module.Length  -  i);                     }                      // 找到所点击的Button,在其下加载子项                      if  ( this .panel1.Controls[i].Name  ==  ((Button)sender).Name)                     {                         findOutStatus  =   true ;                         Panel panel  =   new  Panel();                         panel.BackColor  =  Color.AliceBlue;                         panel.Left  =  _ModuleButtonWidth  *  (i  +   1 );                         panel.Width  =   this .panel1.Width  -  _ModuleButtonWidth  *  Module.Length;                         panel.Height  =   this .panel1.Height;                          switch  (i)                         {                              case   0 :                                 panel.Controls.Add( new  ucPart1());                                  break ;                              case   1 :                                 panel.Controls.Add( new  ucPart2());                                  break ;                              case   2 :                                 panel.Controls.Add( new  ucPart3());                                  break ;                              case   3 :                                 panel.Controls.Add( new  ucPart4());                                  break ;                              case   4 :                                 panel.Controls.Add( new  ucPart5());                                  break ;                         }                          this .panel1.Controls.Add(panel);                     }                 }             }         } 大概意思代码里面都有说了..怎么样?很简单吧?! 附完整源代码: http://files.cnblogs.com/KenBlove/WindowsApplication1.7z

转载于:https://www.cnblogs.com/KenBlove/archive/2008/09/28/1301386.html

相关资源:VB6完全仿QQ登录界面程序.zip
最新回复(0)