大向微博客-長大樂忧伤

当前位置:网站首页 / 技巧知识 / 正文

C#如何使用Panel实现窗体动态侧边栏设置

主要
能够完成侧边栏的展开、躲藏和锁定的功用。添加的侧边栏默许是不显现的经过鼠标的悬停事情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); //鼠标当前位置
//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# Panel 实现窗体 动态侧边栏 设置

版权声明: 本站所有主题由该文章作者发表,该文章作者与長大樂忧伤享有文章相关版权。
本帖可能有部分转自其它媒体,并不代表本站赞同其观点和对其真实性负责,如有侵犯,请告知,将及时予与删除并致歉。

本文链接: http://www.ibolg.net/diannaojiqiao/Panel.html,尊重共享,欢迎转载!

分享本文:

QR:  C#如何使用Panel实现窗体动态侧边栏设置
呃 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

每日领红包