C#使用Panel实现窗体动态侧边栏-创新互联

有时候发现界面的布局比较复杂,需要隐藏显示一部分内容需要使用动态侧边栏的方法实现,虽然可是使用第三方的控件,但是有时候也不需要那么麻烦,自己做了一个简单的,可是使用在要求不高的场所。

目前创新互联建站已为成百上千家的企业提供了网站建设、域名、网站空间、网站托管、服务器租用、企业网站设计、德惠网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

可以实现侧边栏的展开、隐藏和锁定的功能。添加的侧边栏默认是不显示的通过鼠标的悬停事件MouseHover来触发展开动作。侧边栏实际上是一个窗体或者是容器,实现展开的动作必须在一个时间段内逐步的增加宽度,我采用Panel作为容器的载体,在一个线程中逐步增加Panel的Width属性。隐藏,主要使用的是Panel的Visible属性来实现,隐藏条件的判断是通过判断鼠标位置是不是在侧边栏的边界之外来实现的。锁定,是使Panel始终处于显示的状态,使隐藏Panel的函数不执行来实现的。

界面

C#使用Panel实现窗体动态侧边栏

相关代码:

展开:

private void toolStripButton2_MouseHover(object sender, EventArgs e)

       {

//鼠标悬停事件,展开

if (!this.panel2.Visible) //panel2为侧边栏的容器

           {

Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));

               ts.Is true;  //设置为后台线程

               ts.Priority = ThreadPriority.Normal; //设置优先级

               ts.Start((Object)245);  //Panel展开宽度245

           }

       }

//定义的线程执行函数

private void TaskShowPanel(Object ParObject)

       {

int w = (int)ParObject;

for (int i = 0; i <= w; i++)

           {

               ShowPanel(this.panel2, i);

           }

       }

private delegate void SetTextCallback(Panel p1, int w);

///

/// 展开动作

///

/// panel容器

/// 宽度

private void ShowPanel(Panel p1,int w)

       {

//跨线程访问

try

           {

if (p1.InvokeRequired)

               {

SetTextCallback d = new SetTextCallback(ShowPanel);

                   p1.Invoke(d, new Object[] { p1, w });

               }

else

               {

                   p1.Width = w;

if (!p1.Visible)

                   {

                       p1.Visible = true;

                   }

               }

           }

catch (Exception ex)

           {

MessageBox.Show(ex.Message, "ShowPanel函数执行错误");

           }

       }

隐藏:

private void listView1_MouseMove(object sender, MouseEventArgs e)

       {

Point panelPoint = this.PointToClient(Control.MousePosition); //鼠标当前位置

//this.panel2.Location.X panel2的起始位置

//this.panel2.Width panel2的宽度

if (this.panel2.Visible && (panelPoint.X > (this.panel2.Location.X + this.panel2.Width)))

           {

this.panel2.Visible = false;

           }

       }

锁定:

private void button1_Click(object sender, EventArgs e)

       {

//删除隐藏事件

this.listView1.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove);

       }

做的还不太成熟,但是基本的功能实现了,本人抛砖引玉一下,希望有大侠有更好的方法。源代码附上

C#使用pannel实现动态侧边栏

附件:http://down.51cto.com/data/2362406

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:C#使用Panel实现窗体动态侧边栏-创新互联
当前URL:http://azwzsj.com/article/cscgic.html