使用SplitContainer来实现隐藏窗口的部分内容(转)
有两种方法:
(1) Splitter:比较老的方法
(2) SplitContainer:比较新的方法
最终界面如下:

方法一:使用Splitter实现
(1) 在窗口中添加一个Panel控件,即Panel1
将其Dock属性设为Right,这样Panel1就停靠在了窗口最右侧;
(2) 在窗口中添加一个Splitter控件,即Splitter1
将其Dock属性设为Right,这样Splitter1就停靠在了Panel1的左边缘;
将其Size属性中的X设为1,这样Splitter1几乎不可见;
将其Visible属性设为false,这样Splitter1就不能用于手工调整;
注意:此时,Splitter1.MinSize就不管作用了(MinSize属性是用来限制Splitter1拖动时,不至于Panel1太小而无法使用的)
(3) 设置Int型的变量:
private int originWidth;
用来存储初始的Panel1的宽度,在显示Panel1时使用。
(4) 添加隐藏按钮hideBtn的双击事件,代码如下:
- private void hideBtn_Click(object sender, EventArgs e)
- {
- originWidth = panel1.Width;
- panel1.Width = 0;
- }
即设置panel1.width来实现
(5) 添加显示按钮showBtn的双击事件,代码如下:
- private void showBtn_Click(object sender, EventArgs e)
- {
- panel1.Width = originWidth;
- }
走过的弯路(希望大家有借鉴):
(1) 刚开始想通过Splitter1.Location属性来设置Splitter1的位置
- Splitter1.Location=new Point(this.width, 0);
但是始终不行,在设置完之后,又会自动回复,没有变化。
(2) 后来想想,可能是由于Splitter1是Right停靠的,由于Panel1的关系,所以不能自动调整Location属性
所以,把Panel1的Location也进行了设置
- splitter1.Location = new Point(this.Width, 0);
- splitter1.MinSize = 0;
- panel1.Location = new Point(this.Width, 0);
发现还是不行,无解了简直...
后来高手的提示下,修改了panel1.width=0,才告一段落
方法二:使用SplitContainer实现
SplitContainer控件的使用比较简单,封装了三个控件:Panel1, Splitter(没说名字), Panel2
关键属性:SplitContainer.SplitterDistance
该属性可以设置拆分器离 SplitContainer 的左边缘或上边缘的位置
(1) 在窗口上添加一个SplitContainer控件;
(2) 设置一个Int型的变量,用来存储SplitContainer.Panel1的宽度;
private int originWidth;
(3) 添加隐藏按钮hideBtn双击事件,代码如下:
- private void hideBtn_Click(object sender, EventArgs e)
- {
- origionWidth = splitContainer1.Panel1.Width;
- splitContainer1.SplitterDistance = splitContainer1.Width;
- }
(4) 添加显示按钮showBtn双击事件,代码如下:
- private void showBtn_Click(object sender, EventArgs e)
- {
- splitContainer1.SplitterDistance = origionWidth;
- }
走过的弯路:
SplitContainer.SplitterIncrement属性:
获取或设置一个值,该值表示拆分器移动的增量(以像素为单位)
本来想着,既然表示拆分器的移动增量,应该可以的吧
结果也是不好使
小结:
代码也不难,但是碰到了很多难缠的问题。
也可能那些属性可行,但是方法不对。待以后研究吧
使用SplitContainer来实现隐藏窗口的部分内容(转)的更多相关文章
- 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)
在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...
- 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口)
由于工作和学习需要,经常要开一个虚拟机开测试和开发,虚拟机我选择Oracle公司的VirtualBox(用了几年了,感觉不错的一款产品),经常开着这个窗口感觉有些浪费资源,这样隐藏窗口就在需求了. 将 ...
- 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效
在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide() 会导致注册的全局快捷键无效. 反正是其中一个,有点记不清了. 在Form Shown中s ...
- C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 实现这个功能的原理步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是 ...
- 怎样让窗口不显示在任务栏和ALT+TAB中(隐藏窗口再嵌套,几乎是万能的办法)
之前想弄个像QQ旋风那样的悬浮窗口,就研究了下怎么让窗口不显示在任务栏中,方法其实很简单就是将窗口的扩张属性设置成WS_EX_TOOLWINDOW,MSDN中对该属性有详细介绍,代码如下: ::Set ...
- 实现:调用API函数ShowWindow()来隐藏窗口
只需要将相应代码复制即可. 代码如下: #include <iostream> #include <windows.h> int main() { HWND hDos; //声 ...
- electron开发 - mac关闭和隐藏窗口
针对mac平台的app let willQuitApp = false; // 控制退出方式 mainWindow.on('close', (e) => { if (willQuitApp) { ...
- C# 显示、隐藏窗口对应的任务栏
WPF中全屏窗口,会自动隐藏任务栏. 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏 ...
- winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...
随机推荐
- MySql的虚拟机和Xshell5的连接过程
给大家介绍一下虚拟机和Xshell5连接的基本配置1.安装虚拟机,跟着提示一步一步安装即可,注意添加镜像文件,虚拟机就完成了.2.下载一个Xshell5,安装好之后.要修改虚拟机的网卡状态 1) ...
- AIO5物料清单(BOM)列表,搜索编码和名称无效
问题: AIO5物料清单(BOM)列表,搜索编码和名称无效.如图: 原因分析 AIO5的BOM是在二次开发平台上做的,在制作自定义单据的时候[查询参数设置]没有设置.如下图: 解决方案 工具:AIO5 ...
- 四、Hadoop学习笔记————各种工具用法
hive基本hql语法 Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库 ...
- 自学python笔记(二)
一:在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍.所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样 ...
- css随笔属性
anchor伪类,用于阅读文章.a:link(没有接触过的链接),用于链接常规状态 (末访问的链接)a:hover(鼠标放在链接上的状态) 用于产生视觉效果(已访问的链接)a:visited(访问过的 ...
- 基于 HTML5 Canvas 的 3D 模型贴图问题
之前注意到的一个例子,但是一直没有沉下心来看这个例子到底有什么优点,总觉得就是一个 list 列表,也不知道右边的 3d 场景放两个节点是要干嘛,今天突然想起来就仔细地看了一下这个例子的代码,实际操作 ...
- 当final作用于变量、参数、方法和类时该如何处理
final变量: 对于基本类型使用final:它就是一个常量,数值恒定不变 对于对象引用使用final:使得引用恒定不变,一旦引用被初始化指向一个对象,就无法再把 它改为指向另一个对象.然而,对象自身 ...
- JavaSE之绘制菱形
在JavaSE的算法练习中,绘制菱形是一个比较常见的案例.菱形效果如下图所示: 我们在解决算法问题时,通常情况下,先不要急于马上编码,而是要先观察,找出解决问题的关键所在. 在上图中,我们可以看到,菱 ...
- codeforces 887B Cubes for Masha 两种暴力
B. Cubes for Masha time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- mysql如何查看索引使用情况以及优化 - guols0612
mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: ...