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

标签: C#系统应用 panel控件 同一窗体切换页面 加载form 文档大纲
10028人阅读 评论(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/)

 

查看评论

C#学习(messageBox,pictureBox,窗口切换)

本文章来自我的个人网站,如感兴趣,欢迎访问我的个人网站:http://www.qingshuimonk.com/ 为了做信息论编码的assignment,特意学了下C#,好不容易做出来了,还是好好...
  • michaelxi007
  • michaelxi007
  • 2013-11-17 23:02:40
  • 2051

C# Panel实现多窗口切换

实现方法如下: 1.设计  首先在左侧放一个panel,右侧放一个panel(命名为pnlMain),调整大小,在左侧panel里放置两个按钮(多个按钮同理) 2.在按钮里面写方法    在【命...
  • kezhen
  • kezhen
  • 2014-03-29 10:59:33
  • 6363

c# panel里面嵌入窗体

现有一个父窗体name是Parent,子窗体name是Son,要让Son嵌入在Parent的Panel内,则父窗体的初始加载代码如下: private void Parent_Load(object ...
  • wzk456
  • wzk456
  • 2015-09-30 23:17:55
  • 5205

在winform中实现多窗口的使用 及切换

最近看过一个项目觉得很经典。 她  是JSP 来做的,估计玩这个技术的人都比较怀恋WINFORM 所以有做到楼上的效果个人认为她是这样实现的:整个大页面是个frame 为,其左边有菜单a, 右边是主要...
  • lovelxj
  • lovelxj
  • 2005-04-26 17:41:00
  • 4704

C#中两个窗体将相互跳转

首先 program.cs 中 [STAThread] static void Main() { Application.EnableVisualStyles(); Applicat...
  • allenjy123
  • allenjy123
  • 2012-07-08 23:07:52
  • 14133

winform窗口的切换

 假设要在form1 切换到到 from2 ;建议用多panel重叠,在对不同事件响应的时候,分别设置相应panel的visible属性panel简单易用,好东东啊form 里面有Applicatio...
  • zhuanglonghai
  • zhuanglonghai
  • 2006-12-05 21:50:00
  • 5745

winform两个窗体的切换

就是点击一个窗体的button打开一个新的窗体,旧窗体隐藏。点击新窗体的button回到旧窗体,新窗体隐藏。 可以用父子窗体实现。现在介绍另一种简单方法: 旧窗体button代码: p...
  • pillom
  • pillom
  • 2016-04-19 14:26:07
  • 2583

C#之WinForm基础 窗体与代码页相互切换的快捷键

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 感恩曾经帮助过 心少朴 的人...
  • yushaopu
  • yushaopu
  • 2016-09-16 21:56:52
  • 1275

C# 完美解决窗体切换闪屏问题

1, 将以下代码块加在父窗体中的任意位置: protected override CreateParams CreateParams { get { CreateParams cp = ...
  • wzk456
  • wzk456
  • 2015-10-21 16:37:15
  • 2872

C#如何实现多窗口切换

作为一个较为复杂的程序,需要根据不同功能进行窗口切换。下面介绍常用的设置方法。请注意这是一篇编程经验,不是操作系统windows的经验。工具/原料Microsoft Visual Studio 201...
  • bruce135lee
  • bruce135lee
  • 2018-02-28 15:13:34
  • 327
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 253万+
    积分: 2万+
    排名: 398
    牛人博客
    博客专栏
    最新评论