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

  次阅读 来源:互联网(转载协议) 2016-01-27 15:25 我要评论(0)

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

/// <summary>

/// 展开动作

/// </summary>

/// <param name="p1">panel容器</param>

/// <param name="w">宽度</param>

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); //鼠标当前位置

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...