使用SplitContainer来实现隐藏窗口的部分内容(转)

摘要:
这些属性也是可行的,但方法是错误的。

有两种方法:

(1) Splitter:比较老的方法

(2) SplitContainer:比较新的方法

最终界面如下:

使用SplitContainer来实现隐藏窗口的部分内容(转)第1张

方法一:使用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的双击事件,代码如下:

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

即设置panel1.width来实现

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

[csharp] view plain copy
 
  1. private void showBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     panel1.Width = originWidth;  
  4. }  

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

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

[csharp] view plain copy
 
  1. Splitter1.Location=new Point(this.width, 0);  

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

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

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

[csharp] view plain copy
 
  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双击事件,代码如下:

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

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

[csharp] view plain copy
 
  1. private void showBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     splitContainer1.SplitterDistance = origionWidth;  
  4. }  

走过的弯路:

SplitContainer.SplitterIncrement属性:

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

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

结果也是不好使

小结:

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

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

免责声明:文章转载自《使用SplitContainer来实现隐藏窗口的部分内容(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue被部署到子(二级)目录SQL Union和SQL Union All用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R语言ggmap空间可视化机动车交通事故地图

原文链接:http://tecdat.cn/?p=12350 在本文中,我使用ggmap可视化纽约市的交通事故。  数据来自纽约市开放数据。我的数据范围是2012年至2015年。该数据跟踪车辆的类型,发生事故的街道的名称以及事故的经度和纬度坐标。两个坐标都保存为单个字符变量,称为“ LOCATION”。 在下面,我加载数据,删除所有没有位置坐标的事故,并...

Nginx配置转发

nginx location proxy_pass 后面的url 加与不加/的区别  在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。 首先是location进行的是模糊匹配 1)没有“/”时,locatio...

centos7.9环境下编译安装zabbix5.0.9版本

centos7.9环境下安装zabbix5.0.9版本zabbix最新是5.2版本的,看了下官方的介绍发现5.0才是长期支持版,于是安装5.0,方便后续升级打算用yum直接rpm安装省得麻烦,发现各种奇葩问题于是放弃,改用源码编译安装zabbix5.0 + mysql + nginx + php7.4服务器上本身安装了mysql,nginx所以就省去了安装...

Jsp页面跳转和js控制页面跳转的几种方法

Jsp 页面跳转的几种方法 1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet、JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp...

安装Nginx并为node.js设置反向代理

最近看了反向代理和正向代理的东西,想到自己的node.js服务器是运行在3333端口的,也没有为他设置反向代理,node.js项目的一些静态文件是完全可以部署在Nginx上,以减少对node.js的请求。 着手开始做: 1、Nginx依赖gcc,pcre,zlib,openssl之类的库,通过rpm -qa | grep gcc查询,没有的话都安装上。 2...

Android 使用GPS定位获取经纬度的方法

移动 是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,模拟设备的位置变化,改变经纬度后,点击send,然后运行程序,在应用程序中,动态的获取设备位置,然后显示当前的位置信息。 获取位置信息分为三步: 1. 添加系统权限,来支持对LBS硬件的访问 < uses-permission android:name="android.perm...