C#使用splitContainer控件制作收缩展开面板
C#使用splitContainer控件制作收缩展开面板
附Squid Ink公司软件的界面效果:

先说GroupBox这个控件,这个基本上能实现面板伸缩和扩展的功能,但是个人感觉GroupBox其本身那个框让人感觉不是很爽,再加上我想在点击处加上伸缩和展开的图标,并且鼠标放在点击处会变成手型(GroupBox的话鼠标放在整个控件都会变成手型,不只是标题处),于是就没深究这个框到底能不能去掉。
再去网上搜了一下SplitContainer这个控件的用法,这个控件总共有两个面板,网上很多人用这个控件都是采用点击第一个面板,隐藏第二个面板的方法:
- private void SplitContainer_Panel1_MouseClick(object sender, MouseEventArgs e)
- {
- int i;
- SplitterPanel splitPanel = (SplitterPanel)sender;
- for (i = 0; i < 10; i++)
- if (splitContainers[i].Panel1 == splitPanel)
- break;
- splitContainers[i].Panel2Collapsed = !splitContainers[i].Panel2Collapsed;
- }
首先在第一个面板上面添加鼠标点击事件,用点击的方法将第二个面板伸缩和展开,由于监听的是第一个面板,而第二个面板隐藏需要SplitContainer需要整个控件的变量,所以我把所有Form里面的SplitContainer都添加到splitContainers这个数组里面。如果只有一个SplitContainer控件需要隐藏的话,那么这个功能基本上就能实现了,但是如果有多个面板需要隐藏的话,这个方法的排版会很麻烦,因为第二个面板只是隐藏,不是消失,第二个面板位置跟上去的话会出现控件的覆盖问题。如果有朋友解决了这个问题的话,可以指点我一下。
本来是山穷水尽了,一个意外的想法突然出现在脑海中。其实我一直是抓着SplitContainer这个控件的面板隐藏功能不放,换一种思路,我们可以像GroupBox一样,直接设置SplitContainer控件的大小:
- private void SplitContainer_Panel1_MouseClick(object sender, MouseEventArgs e)
- {
- int i;
- SplitterPanel splitPanel = (SplitterPanel)sender;
- for (i = 0; i < 10; i++)
- if (splitContainers[i].Panel1 == splitPanel)
- break;
- //splitContainers[i].Panel2Collapsed = !splitContainers[i].Panel2Collapsed;
- if (splitContainers[i].Size.Height <= 50)
- {
- splitContainers[i].Size = containerSizes[i];
- splitContainers[i].Panel1.BackgroundImage = global::inkjet.Properties.Resources.展开;
- }
- else
- {
- splitContainers[i].Size = new Size(splitContainers[i].Size.Width, 20);
- splitContainers[i].Panel1.BackgroundImage = global::inkjet.Properties.Resources.收缩;
- }
- }
事实证明,重新设置SplitContainer的大小之后,再修改下面的SplitContainer控件的位置能很好地满足我的需求。后来我发现,将所有的SplitContainer控件放到FlowLayoutPanel里面,在修改SplitContainer控件大小之后,无需修改位置就能解决这个问题。
附 效果图:

当然界面的颜色还需完善,展开和收缩的图标是从Squid Ink公司的软件截图而来。但是已经能满足这款软件的需求,如果路过的朋友有更好的方法的话,欢迎指点。
C#使用splitContainer控件制作收缩展开面板的更多相关文章
- 如何使用SplitContainer控件[转]
原文地址:http://yinzhihua2008.blog.163.com/blog/static/794306720120511150457/ 在Windows资源管理器中,当把鼠标指针移动到Tr ...
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
- C#如何使用SplitContainer控件实现上下分隔
C#如何使用SplitContainer控件实现上下分隔 Orientation 属性设置为Horizontal 完美世界 http://www.23cat.com/Contents_51864.ht ...
- 利用免费的Spire.XLS控件制作Excel报表
我们小组上个季度接手了一个项目其中需要实现创建excel文档的功能,寻找实现这个功能的控件的任务分配给了我,通过百度搜索我找到了一个免费的控件,它是由E-iceblue公司推出的spire.xls控件 ...
- [原创]WinForm分页控件制作
先简单说一下思路: 1.做一个分页控件的导航类,即记录总页数.当前页.每页记录数,下一页.上一页.跳转等操作的页数变更. class PageNavigation{/// <summary> ...
- 网页WEB打印控件制作-开放源码
在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的一件事件,本文将自己开发 ...
- C# WinForm的SplitContainer控件固定Panel大小[转]
原文地址:http://zhidao.baidu.com/link?url=mhkUszZ8am_vqNX3KAOff-psd3af7Xl3DL77KxJ-rWIAqIArQHzQIEBoX49mQA ...
- ASP.NET - 用户控件制作
首先添加用户控件: 在里面写上代码: <%@ Control Language="C#" AutoEventWireup="true" CodeBehin ...
- IOS开发-UI学习-使用UIImageView控件制作动画
先添加40张tomcat的图片到资源列表中:名称为cat_eat0000.jpg到cat_eat0039.jpg. 1.定义所需控件 // 定义按钮,图片控件.可变数组对象 UIButton *act ...
随机推荐
- wpf 两个自定义控件
wpf 两个自定义控件 一个是IP控件,一个滑动条.先看下效果图 IPControl 1.实际工作中有时需要设置IP信息,就想着做一个ip控件.效果没有window自带的好,需要通过tab切换.但也能 ...
- .NET Core CSharp初级篇 1-2 循环与判断
.NET Core CSharp初级篇 1-2 本节内容循环与判断 循环 循环是一个在任何语言都是极为重要的语法,它可以用于很多东西,例如迭代数组等等.在C#中,语法层面的循环有:for , fore ...
- Python爬取前程无忧网站上python的招聘信息
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我姓刘却留不住你的心 PS:如有需要Python学习资料的小伙伴可以 ...
- JS基础语法---练习:交换两个变量的值
* JavaScript简称为JS * JavaScript是什么? * 是一门脚本语言:不需要编译,直接运行 * 是一门解释性的语言:遇到一样代码就解释一行代码 * C#语言 ...
- css利用padding-top设置等比例遇到的问题
外层盒子如果设置了左右margin,外层盒子设置对应比例的时候,是按外层盒子的宽+两边的margin算做横向总长度的,不是只算宽度的.
- Java --Lamda表达式
Lamda:属于函数式编程的概念: interface IMessage { public void print() ; } public class TestDemo { public static ...
- 设置view的layer属性方法
1.需要导入QuartzCore.framewoork框架到工程2.在文件中导入#import 3.设置 必须导入的空间 #import<QuartzCore/QuartzCore.h> ...
- 【转载】Gradle for Android 第六篇( 测试)
由于现阶段Android开发趋于敏捷开发,再加上国内大大小小的互联网公司都在做app,导致很多这会是一个系列,所以如果你看完这篇文章,请看下列文章: 开发人员对单元测试没有基本的概念,但是本篇博文不会 ...
- c冒泡排序
外层循环需要循环和len一样的次数 //定义一个函数,该函数返回NSString void bubbleSort(int nums[],unsigned long len) { //控制本轮循环是否发 ...
- java annotation使用介绍
还望支持个人博客站:http://www.enjoytoday.cn 介绍 Annotation的中文名字叫注解,开始与JDK 1.5,为了增强xml元数据和代码的耦合性的产物.注解本身并没有业务逻辑 ...