有两种方法:

(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的双击事件,代码如下:

  1. private void hideBtn_Click(object sender, EventArgs e)
  2. {
  3. originWidth = panel1.Width;
  4. panel1.Width = 0;
  5. }

即设置panel1.width来实现

(5) 添加显示按钮showBtn的双击事件,代码如下:

  1. private void showBtn_Click(object sender, EventArgs e)
  2. {
  3. panel1.Width = originWidth;
  4. }

走过的弯路(希望大家有借鉴):

(1) 刚开始想通过Splitter1.Location属性来设置Splitter1的位置

  1. Splitter1.Location=new Point(this.width, 0);

但是始终不行,在设置完之后,又会自动回复,没有变化。

(2) 后来想想,可能是由于Splitter1是Right停靠的,由于Panel1的关系,所以不能自动调整Location属性

所以,把Panel1的Location也进行了设置

  1. splitter1.Location = new Point(this.Width, 0);
  2. splitter1.MinSize = 0;
  3. 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双击事件,代码如下:

  1. private void hideBtn_Click(object sender, EventArgs e)
  2. {
  3. origionWidth = splitContainer1.Panel1.Width;
  4. splitContainer1.SplitterDistance = splitContainer1.Width;
  5. }

(4) 添加显示按钮showBtn双击事件,代码如下:

  1. private void showBtn_Click(object sender, EventArgs e)
  2. {
  3. splitContainer1.SplitterDistance = origionWidth;
  4. }

走过的弯路:

SplitContainer.SplitterIncrement属性:

获取或设置一个值,该值表示拆分器移动的增量(以像素为单位)

本来想着,既然表示拆分器的移动增量,应该可以的吧

结果也是不好使

小结:

代码也不难,但是碰到了很多难缠的问题。

也可能那些属性可行,但是方法不对。待以后研究吧

使用SplitContainer来实现隐藏窗口的部分内容(转)的更多相关文章

  1. 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)

    在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...

  2. 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口)

    由于工作和学习需要,经常要开一个虚拟机开测试和开发,虚拟机我选择Oracle公司的VirtualBox(用了几年了,感觉不错的一款产品),经常开着这个窗口感觉有些浪费资源,这样隐藏窗口就在需求了. 将 ...

  3. 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效

    在Form Load中设置showInTaskBar =false   或 隐藏窗口 this.Hide() 会导致注册的全局快捷键无效.  反正是其中一个,有点记不清了. 在Form Shown中s ...

  4. C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 实现这个功能的原理步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是 ...

  5. 怎样让窗口不显示在任务栏和ALT+TAB中(隐藏窗口再嵌套,几乎是万能的办法)

    之前想弄个像QQ旋风那样的悬浮窗口,就研究了下怎么让窗口不显示在任务栏中,方法其实很简单就是将窗口的扩张属性设置成WS_EX_TOOLWINDOW,MSDN中对该属性有详细介绍,代码如下: ::Set ...

  6. 实现:调用API函数ShowWindow()来隐藏窗口

    只需要将相应代码复制即可. 代码如下: #include <iostream> #include <windows.h> int main() { HWND hDos; //声 ...

  7. electron开发 - mac关闭和隐藏窗口

    针对mac平台的app let willQuitApp = false; // 控制退出方式 mainWindow.on('close', (e) => { if (willQuitApp) { ...

  8. C# 显示、隐藏窗口对应的任务栏

    WPF中全屏窗口,会自动隐藏任务栏. 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏 ...

  9. winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...

随机推荐

  1. GacUtil

    编辑本段工具简介 全局程序集缓存工具 (Gacutil.exe) 管理程序集缓存的 .NET 实用工具库还提供一种命令行接口工具,名为全局程序集缓存实用工具 (Gacutil.exe). 编辑本段命令 ...

  2. work 2013-07-19

    今天,在现场进行了数据库的优化,将数据库的日志截断和压缩了 use 测试库backup log 测试库 with no_logdbcc shrinkfile (测试库_Data,1)dbcc shri ...

  3. NSNotification

    1.什么是NSNotification 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似与公共栏,对象在这里注册关注每个确定Notifica ...

  4. 【转】用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程

    原文链接:http://www.cnblogs.com/shuoer/p/7779131.html 用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程 首先解释下什么 ...

  5. 企业级分布式监控系统-Zabbix基础

    1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...

  6. haproxy,tomcat.apache记录用户真实IP

    Haproxy配置: default加入: option httpclose option forwardfor Tomcat配置: server.xml中添加 prefix="localh ...

  7. Atcoder R84 D Small Multiple

    题意:给定一个正整数K,求K的倍数中,各位上的数字之和最小是多少? 思路非常巧妙,对于一个数,我们有定义两种改变方式: 1.加1,则数字之和+1(9的情况另行考虑) 2.乘10,数字之和不变 对于末位 ...

  8. Python爬虫(十八)_多线程糗事百科案例

    多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...

  9. ROC和AUC的区别

    ROC是一个曲线,AUC是曲线下面的面积值.   ROC曲线是FPR和TPR的点连成的线. 可以从上面的图看到,横轴是FPR, 纵轴是TPR (TPR = TP / (TP + FN):FPR = F ...

  10. gRPC异步处理应答

    gRPC异步处理应答 (金庆的专栏) gRPC的演示样例 greeter_async_client.cc 不算是异步客户端,它使用了异步请求.可是堵塞式等待应答,结果成为一个同步调用. std::st ...