C#使用splitContainer控件制作收缩展开面板

原创 2011年07月19日 17:18:02
  • 15690
        最近对Squid Ink公司的一款PC端软件系统上的一个收缩伸展面板很感兴趣,加上自己做的喷码机数据管理系统的界面非常单调,想在现在界面的基础上将这个功能加上去。我个人只是写c#的一个菜鸟,在网上查了C#的很多控件,很多人都是用GroupBox和SplitContainer实现的,于是就对这两个控件进行了测试。
附Squid Ink公司软件的界面效果:

先说GroupBox这个控件,这个基本上能实现面板伸缩和扩展的功能,但是个人感觉GroupBox其本身那个框让人感觉不是很爽,再加上我想在点击处加上伸缩和展开的图标,并且鼠标放在点击处会变成手型(GroupBox的话鼠标放在整个控件都会变成手型,不只是标题处),于是就没深究这个框到底能不能去掉。

再去网上搜了一下SplitContainer这个控件的用法,这个控件总共有两个面板,网上很多人用这个控件都是采用点击第一个面板,隐藏第二个面板的方法:

  1. private void SplitContainer_Panel1_MouseClick(object sender, MouseEventArgs e)
  2. {
  3. int i;
  4. SplitterPanel splitPanel = (SplitterPanel)sender;
  5. for (i = 0; i < 10; i++)
  6. if (splitContainers[i].Panel1 == splitPanel)
  7. break;
  8. splitContainers[i].Panel2Collapsed = !splitContainers[i].Panel2Collapsed;
  9. }

首先在第一个面板上面添加鼠标点击事件,用点击的方法将第二个面板伸缩和展开,由于监听的是第一个面板,而第二个面板隐藏需要SplitContainer需要整个控件的变量,所以我把所有Form里面的SplitContainer都添加到splitContainers这个数组里面。如果只有一个SplitContainer控件需要隐藏的话,那么这个功能基本上就能实现了,但是如果有多个面板需要隐藏的话,这个方法的排版会很麻烦,因为第二个面板只是隐藏,不是消失,第二个面板位置跟上去的话会出现控件的覆盖问题。如果有朋友解决了这个问题的话,可以指点我一下。

本来是山穷水尽了,一个意外的想法突然出现在脑海中。其实我一直是抓着SplitContainer这个控件的面板隐藏功能不放,换一种思路,我们可以像GroupBox一样,直接设置SplitContainer控件的大小:

  1. private void SplitContainer_Panel1_MouseClick(object sender, MouseEventArgs e)
  2. {
  3. int i;
  4. SplitterPanel splitPanel = (SplitterPanel)sender;
  5. for (i = 0; i < 10; i++)
  6. if (splitContainers[i].Panel1 == splitPanel)
  7. break;
  8. //splitContainers[i].Panel2Collapsed = !splitContainers[i].Panel2Collapsed;
  9. if (splitContainers[i].Size.Height <= 50)
  10. {
  11. splitContainers[i].Size = containerSizes[i];
  12. splitContainers[i].Panel1.BackgroundImage = global::inkjet.Properties.Resources.展开;
  13. }
  14. else
  15. {
  16. splitContainers[i].Size = new Size(splitContainers[i].Size.Width, 20);
  17. splitContainers[i].Panel1.BackgroundImage = global::inkjet.Properties.Resources.收缩;
  18. }
  19. }

事实证明,重新设置SplitContainer的大小之后,再修改下面的SplitContainer控件的位置能很好地满足我的需求。后来我发现,将所有的SplitContainer控件放到FlowLayoutPanel里面,在修改SplitContainer控件大小之后,无需修改位置就能解决这个问题。

附 效果图:

当然界面的颜色还需完善,展开和收缩的图标是从Squid Ink公司的软件截图而来。但是已经能满足这款软件的需求,如果路过的朋友有更好的方法的话,欢迎指点。

C#使用splitContainer控件制作收缩展开面板的更多相关文章

  1. 如何使用SplitContainer控件[转]

    原文地址:http://yinzhihua2008.blog.163.com/blog/static/794306720120511150457/ 在Windows资源管理器中,当把鼠标指针移动到Tr ...

  2. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  3. C#如何使用SplitContainer控件实现上下分隔

    C#如何使用SplitContainer控件实现上下分隔 Orientation 属性设置为Horizontal 完美世界 http://www.23cat.com/Contents_51864.ht ...

  4. 利用免费的Spire.XLS控件制作Excel报表

    我们小组上个季度接手了一个项目其中需要实现创建excel文档的功能,寻找实现这个功能的控件的任务分配给了我,通过百度搜索我找到了一个免费的控件,它是由E-iceblue公司推出的spire.xls控件 ...

  5. [原创]WinForm分页控件制作

    先简单说一下思路: 1.做一个分页控件的导航类,即记录总页数.当前页.每页记录数,下一页.上一页.跳转等操作的页数变更. class PageNavigation{/// <summary> ...

  6. 网页WEB打印控件制作-开放源码

    在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的一件事件,本文将自己开发 ...

  7. C# WinForm的SplitContainer控件固定Panel大小[转]

    原文地址:http://zhidao.baidu.com/link?url=mhkUszZ8am_vqNX3KAOff-psd3af7Xl3DL77KxJ-rWIAqIArQHzQIEBoX49mQA ...

  8. ASP.NET - 用户控件制作

    首先添加用户控件: 在里面写上代码: <%@ Control Language="C#" AutoEventWireup="true" CodeBehin ...

  9. IOS开发-UI学习-使用UIImageView控件制作动画

    先添加40张tomcat的图片到资源列表中:名称为cat_eat0000.jpg到cat_eat0039.jpg. 1.定义所需控件 // 定义按钮,图片控件.可变数组对象 UIButton *act ...

随机推荐

  1. SQLPrompt8.2 安装之后找不到激活入口

    如果你发现是这样的,找不到像其他人说的serial number这个选项,不要惊慌.. 首先你得先断网,然后再打开sql客户端,点击Manage License ,然后你会看到 activate 这个 ...

  2. Linux帮助——重要文件

    Linux帮助——重要文件 摘要:本文主要介绍了Linux系统中常用的文件. 查看系统安装版本 文件 /etc/redhat-release 内容 [root@localhost ~]# cat /e ...

  3. Threads(异步和多线程)

    Task是.NET Framework4.5出现的,线程是基于线程池的,然后提供丰富的api,Thread方法很多很强大,但是太过强大,没有限制. DoSomethingLong方法如下: /// & ...

  4. JS基础语法---break关键字

    break关键字: 如果在循环中使用,遇到了break,则立刻跳出当前所在的循环       for (var i = 0; i < 10; i++) {         while (true ...

  5. 如何编写 maptalks plugin

    前面写过 maptalks plugin ( ArcGISTileLayer ),有读者留言说文章写得太精简,根据文章给出的核心代码没办法写出一个完整的 plugin ( 文中有完整 demo 地址, ...

  6. Linux中LVM逻辑卷管理

    一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区 进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的 ...

  7. 记录C#-WPF打开/关闭>>事件执行顺序

    打开执行顺序                                          关闭执行顺序

  8. [20190510]rman备份的疑问8.txt

    [20190510]rman备份的疑问8.txt --//上午测试rman备份多个文件,探究input memory buffer 的问题.--//补充测试5个文件的情况.--//http://blo ...

  9. Troubleshooting ORA-1628 - max # extents (32765) reached for rollback segment <SEGMENT_NAME> (Doc ID 1580182.1)

    Troubleshooting ORA-1628 - max # extents (32765) reached for rollback segment <SEGMENT_NAME> ( ...

  10. vue-router 之 keep-alive路由缓存处理include+exclude

    keep-alive 简介 keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染. 用法也很简单: <keep-alive> <compone ...