比来对Squid Ink公司的一款PC端软件系统上的一个收缩伸展面板很感兴趣,加上本身做的喷码机数据打点系统的界面非常单调,想在此刻界面的根本大将这个成果加上去。我小我私家只是写c#的一个菜鸟,在网上查了C#的很多控件,很多人都是用GroupBox和SplitContainer实现的,于是就对这两个控件进行了测试。
附Squid Ink公司软件的界面效果:
先说GroupBox这个控件,这个根基上能实现面板伸缩和扩展的成果,但是小我私家觉得GroupBox其自己阿谁框让人觉得不是很爽,再加上我想在点击处加上伸缩和展开的图标,并且鼠标放在点击处会酿成手型(GroupBox的话鼠标放在整个控件城市酿成手型,不但是标题处),于是就没深究这个框到底能不能去失。
再去网上搜了一下SplitContainer这个控件的用法,这个控件总共有两个面板,网上很多人用这个控件都是给与点击第一个面板,隐藏第二个面板的要领:
[csharp]
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控件的巨细:
[csharp]
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.收缩;
}
}