C#使用Panel实现窗体动态侧边栏_.Net教程
推荐:减少.NET应用程序内存占用的一则实践最近一周比较忙,主要的工作内容是在做一个叫键盘精灵的东西,简单来讲就是将很多数据放到内存中,对这些数据进行快速检索,然后找出根据输入条件最匹配的10条记录并予以展示。具体和下面两款炒股软件的相关功能类似: 数据以文本形式存在文件中,且数据量较大,有近20
可以实现侧边栏的展开、隐藏和锁定的功能。添加的侧边栏默认是不显示的通过鼠标的悬停事件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);
}
分享:进程性能计数器已禁用的解决办法未处理的异常:进程性能计数器已禁用 调试出错: 未处理的异常: System.InvalidOperationException: 进程性能计数器已禁用,因此无法执行所请求的操作 问题解决: 方法一: 这时只要修复一下windows的性能计数器即可。 具体方法:在运行中输入:lodctr /r 然后回车,运
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-C#使用Panel实现窗体动态侧边栏。