关闭

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

标签: C#系统应用panel控件同一窗体切换页面加载form文档大纲
9586人阅读 评论(5) 收藏 举报
分类:

该文章是项目"个人电脑历史记录清除软件"的系列文章.主要讲述如何使用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/)

 

1
0
查看评论

c# panel 自动调整大小

1、某个窗体设置为父窗体,将该窗体的IsMdiContainer属性设置为True 2、添加menuStrip1,然后新增相关的窗口 3、添加SplitContainer控件,设置splitContainer1的FixedPannel-->pannel1,这样pannel2就会紧贴pann...
  • brian0031
  • brian0031
  • 2017-09-25 17:28
  • 636

c# panel里面嵌入窗体

现有一个父窗体name是Parent,子窗体name是Son,要让Son嵌入在Parent的Panel内,则父窗体的初始加载代码如下: private void Parent_Load(object sender, System.EventArgs e){this.IsMdiContainer=tr...
  • wzk456
  • wzk456
  • 2015-09-30 23:17
  • 4593

c# 中关于panel 的说明

有时候需要用到一个窗体中嵌入一个别几个普通窗体..一般的调用是嵌不进去了.. 要用了,样式等..看代码.. 窗体一中嵌入窗体二 在窗体一的代码里写入以下代码: 在窗体一里拖入panel控件(且panel控件显示最大化)      ...
  • a5251199
  • a5251199
  • 2015-11-12 10:23
  • 2476

C# 在panel中动态添加按钮 与 分批删除

参考文章:①http://www.cnblogs.com/yuzhihui/p/5749233.html②http://www.cnblogs.com/steed-zgf/archive/2012/04/03/2430819.html先来一张效果图。画布中的图片是以 button 的属性Backgr...
  • qq842977873
  • qq842977873
  • 2017-03-29 19:36
  • 313

C#如何在Panel或者GroupBox控件中自由地切换其他窗体

如果想要在C#中做如下所述的功能: 通过点击按钮等动作,切换Panel或者GroupBox控件中显示的窗体。 具体要如何实现呢? 下面演示如何在Panel中实现该效果。 其实方法很简单,基本思路就是每次点击事件发生后,清空Panel中的所有Controls,然后添加你需要的窗体进来。 详细步骤如下所...
  • IllegalName
  • IllegalName
  • 2017-03-23 15:28
  • 1078

C# 清空panel中所有控件

this.panel1.Controls.Clear();
  • foart
  • foart
  • 2008-10-04 16:59
  • 7742

C# 透明背景Panel, 透明图像, PitureBox透明效果

C# 透明背景Panel,透明图像,PitureBox透明效果
  • scimence
  • scimence
  • 2015-06-04 17:39
  • 4125

C# WinForm中将Form显示在Panel中(C#)

当我们在做WinForm的程序时,总是要弹出一些窗体,但弹出窗体看起来效果都不是很好,特别是弹出的窗体很多时,这时候就会影响整个软件的用户体验.所以还是要尽量的避免弹出窗体.我们可以用这样的方法来解决此问题,将父窗体作为容器,将字窗体显示到父窗体中,而不是作为弹出窗体.将弹出窗体显示在父窗体中,可在...
  • renyouprince
  • renyouprince
  • 2009-04-29 12:51
  • 14810

C# Panel实现多窗口切换

实现方法如下: 1.设计  首先在左侧放一个panel,右侧放一个panel(命名为pnlMain),调整大小,在左侧panel里放置两个按钮(多个按钮同理) 2.在按钮里面写方法    在【命名规范检查】按钮(我写的代码测试工具)里写如下方法...
  • kezhen
  • kezhen
  • 2014-03-29 10:59
  • 6052

c#中panel控件有什么作用

简单的说,panel控件是一个容器控件,你可以在上面放置别的控件,当做一个Form用。 使用 Panel 控件可对控件进行分组以及组织 ASP.NET 移动网页的内容。将控件组织在面板中,可提供有关在运行时控件应如何分页的信息。应用程序会尽可...
  • a364416036
  • a364416036
  • 2016-08-29 11:30
  • 4357
    个人资料
    • 访问:2326231次
    • 积分:21610
    • 等级:
    • 排名:第413名
    • 原创:270篇
    • 转载:10篇
    • 译文:0篇
    • 评论:1651条
    个人博客
    作者:杨秀璋
    学历:本科-北京理工大学
               硕士-北京理工大学
    现任教于贵财财经大学信息学院
    http://www.eastmountyxz.com

    简介:自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。

    贵州纵美路迢迢,
    为负劳心此一遭。
    收得破书三四本,
    也堪将去教尔曹。

    娜美人生,醉美生活。
    他和她经历风雨,慢慢变老。
    博客专栏
    牛人博客
    最新评论