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

[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属性:

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

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

结果也是不好使

小结:

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

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

时间: 2024-10-25 19:33:27

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

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

在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: cannot send events to objects owned by a different thread 解决方案是使用信号槽,就是在线程里不断的发信号,UI线程的槽函数不断的接受信号并做处理: So as a solution I would propose the following: Defi

模拟鼠标点击+隐藏窗口

#include<iostream> #include<conio.h> #include<windows.h> #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //必要的,我是背下来的 using namespace std; int main(){ bool f=false; HWND hwnd=GetForegroundWindow();//获取最前端的窗

winform 程序隐藏窗口运行

DWPublishForm frm = new DWPublishForm(); frm.IsAutoUpdate = true; frm.ShowInTaskbar = false; frm.FormBorderStyle = FormBorderStyle.None; frm.WindowState = FormWindowState.Minimized; frm.Location = new System.Drawing.Point(-1000, -1000); frm.Size = ne

1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览

 1 新建项目 A  修改pro中的内容如下: HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets printsupport B  编写MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget> #include <QGraphicsScene> #include <QGraphicsLineItem>

Delphi TScrollBar 用于滚动窗口、组件内容

滚动条组件(TScrollBar)此组件是一个Windows滚动条,用于滚动窗口.组件内容.许多控制有滚动条属性,它们把滚动条作为自己的一部分,对于没有完整滚动条的控制,TScrollBar组件提供了一个附加的功能,运用它可以使某些控制的内容易于操作. 1.TScrollBar组件的典型用法 一般情况下,滚动条是自动加入的,例如前面讲的列表框,当项目不能完全显示时,列表框将自动加上滚动条.当用户操作滚动条时,列表自动滚动. 如果想自己操纵窗口滚动,就要用到TScrollBar组件,当用户在滚动条

NSIS隐藏窗口标题栏自带的按钮(最大化,最小化,关闭X)

这个问题实在八月份逛csdn论坛的时候偶然遇到的,当时比较好奇楼主为啥要隐藏关闭按钮,就顺口问了下,结果楼主已经弃楼,未给出原因,猜着可能是为了做自定义页面美化,无法改变按纽外观之类的,后来琢磨了下,觉得修改窗口风格比较简单,这里使用的是GetWindowLong与 SetWindowLong两个API. Function onGUIInit System::Call 'user32::GetWindowLong(i $hwndparent,i -16)i.r0' intop $1 0x8000

仿QQ隐藏窗口部分代码(右侧放大)

1.Designer.cs部分代码 namespace QQFrm { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="

仿QQ隐藏窗口部分代码(右侧隐藏)

1.Designer.cs部分代码 namespace 窗体的浮动及隐藏 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name=&q

全局热键与隐藏窗口启动程序矛盾的解决记录

需要实现的需求如下: 程序启动分2种:正常带窗口(手动启动):静默不带窗口直接显示托盘(开机启动:自动更新后启动) 遇到的难点及解决: 由于程序用用到全局热键截屏(由RegisterHotKey...实现),发现最小化托盘后就有问题了.最后发现去掉"this.ShowInTaskbar=false;"就可以了.至于原因没有深究.但要是没有这句的话,开机带参数静默启动时会出现闪屏,而且更严重的是,自动更新是通过后台一个服务控制的,所以自动更新后启动前台程序需要session0穿透.通过这