C# 系统应用之使用Pancel控件同一窗体切换页面

简介:

该文章是项目"个人电脑历史记录清除软件"的系列文章.主要讲述如何使用Pancel控件实现类似于360安全卫士的点击图标窗体不变,但页面内容变换的功能及遇到的重叠Panel不能设置Visible(可见)问题.

一.通过文档大纲查看层次关系

在使用panel控件时我遇到的一个问题是:当有多个panel(对控件集合分组)控件重叠显示时,在页面切换如下代码:

private void pictureBox1_Click(object sender, EventArgs e)
{
    panelIE.Visible = true;
    panel2.Visible = false;
}

但运行的结果总是Panel1和Panel2同时隐藏.(感谢:bdmh)
解决方案:其中一个panel的parent可能被设置为另一个panel了,在拖动窗体控件时很容易就拖动至其他空间上.通过打开"视图->其他窗口->文档大纲"查看控件的层次图,就可以发现panelIE确实被自动设置为panel2的parent.
所以可以在"文档大纲"中手动拖动设置其panel关系,但好像只能拖动至顶层.(PS:没有找到好的方法,而且选中某个panel添加控件如button没有其视图可编辑)

二.设置多个panel切换界面

最初的打算是使用6个panel控件实现,点击不同的图标设置其Visible(是否课件)实现同一个窗体切换界面.代码如下:

/// <summary>
/// 点击标题菜单,对panel的显示
/// </summary>
/// <param name="p"></param>
private void PanelIsDisplay(int p)
{
    //设置panel显示界面 (IE\Word\回收站\U盘\电脑\文件粉碎)
    panelIE.Visible = false;
    panelWord.Visible = false;
    panelRecycle.Visible = false;
    panelU.Visible = false;
    panelRecent.Visible = false;
    panelFile.Visible = false;        

    switch (p)
    {
        case 1:  //显示"清除IE"
            {
                panelIE.Visible = true;
            }
            break;
        case 2:  //显示"清除Word"
            {
                panelWord.Visible = true;
            }
            break;
        case 3:  //显示"清空回收站"
            {
                panelRecycle.Visible = true;
                this.panelRecycle.BackColor = Color.Red;
            }
            break;
        case 4:  //显示"清除U盘"
            {
                panelU.Visible = true;
            }
            break;
        case 5:  //显示"电脑清理"
            {
                panelRecent.Visible = true;
            }
            break;
        case 6:  //显示"电脑清理"
            {
                panelFile.Visible = true;
            }
            break;
        default:
            {

            }
            break;
    }
}

//鼠标点击"清除IE"实现切换界面
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    //透明罩设置
    cmd.ShowOpaqueLayer(panel_mol3, 125, true);

    //自定义设置Panel切换函数
    PanelIsDisplay(1);
}

但是后来发现设置多个panel的层次关系和向某个panel中添加控件时非常繁琐,同时有的控件不能很好的设置.所以建议如果是2个panel的切换或者没有重叠的panel设置,可以通过该方法设置其Visible(是否可见)来隐藏与显示.如果重叠的可以参考下面的方法.

三.Panel控件加载Form实现页面切换

可以通过panel控件加载Form来实现该页面切换功能.向解决方案中添加不同页面的Form,设置窗体的控件是非常方便的,再加载到Panel2中显示即可.代码如下:

/// <summary>
/// 向panel2中加载窗体Form,MouseEnter事件调用
/// </summary>
/// <param name="p"></param>
private void Control_Add(Form form)
{
    panel2.Controls.Clear();    //移除所有控件
    form.TopLevel = false;      //设置为非顶级窗体
    form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //设置窗体为非边框样式
    form.Dock = System.Windows.Forms.DockStyle.Fill;                  //设置样式是否填充整个panel
    panel2.Controls.Add(form);        //添加窗体
    form.Show();                      //窗体运行
} 

//鼠标进入"清空回收站"
private void panel_mol3_MouseEnter(object sender, EventArgs e)
{
    //透明罩设置
    cmd3.ShowOpaqueLayer(panel_mol3, 125, true);
    if (isClick1 == false) cmd1.HideOpaqueLayer();
    if (isClick2 == false) cmd2.HideOpaqueLayer();
    if (isClick4 == false) cmd4.HideOpaqueLayer();
    if (isClick5 == false) cmd5.HideOpaqueLayer();
    if (isClick6 == false) cmd6.HideOpaqueLayer();

    //自定义函数加载窗体 CleanRecycle
    CleanRecycle recycle = new CleanRecycle();
    Control_Add(recycle);
}

运行结果如下图所示:

最后该文章主要是结合自己的实际东西讲解,有些浅显和简单,如果你刚好遇到类似的问题就可能对你使用Panel控件有所帮助.同时如果在文章中遇到错误或不足的地方,请海涵!我也在寻找更好的方法,如果你在同一个窗体下切换界面有什么更好的方法,希望告知.
(By:Eastmount 2014-3-18 下午4点 原创CSDNhttp://blog.csdn.net/eastmount/)

 

目录
相关文章
|
10月前
|
SQL 数据库 数据安全/隐私保护
C#wpf学习卡后台管理系统
C#wpf学习卡后台管理系统
271 32
|
9月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
239 3
|
9月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
240 5
|
10月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
429 0
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
657 3
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
340 2
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
253 0
|
5月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
297 19
|
6月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1126 0