QQ中的板子实现分组很好用,也很漂亮,但是我们用怎么实现呢?这里我将将这里给出方法:
首先我给出截图和部分控件的设置:
好,然后我们做一些必要的设置:
frmQQ:Text:QQ;
Button1:Text:Group1, Dock:Top;
Listview1:Dock:Top;
Button2:Text:Group2,Dock:Bottom;
Button3:Text:Group3 Dock:Bottom;
ImageList1:根据需要选择ColorDepth(颜色深度),在添加中加入合适的图形文件,我的Demo中设置了7张图片,为了方便,我用1-7进行命名。
然后我们开始编码
private void frmQQ_Load(object sender, EventArgs e)
{
listView1.Dock = DockStyle.None;
button1.SendToBack();
button1.Dock = DockStyle.Top;
button2.Dock = DockStyle.Bottom;
button3.SendToBack();
button3.Dock = DockStyle.Bottom;
listView1.BringToFront();
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.LargeImageList = imageList;
listView1.Items.Add("pic1", "WyNfee", 0);
listView1.Items.Add("pic2", "Isolate", 1);
listView1.Items.Add("pic3", "Marion", 2);
listView1.Items.Add("pic4", "Carter", 3);
listView1.Items.Add("pic5", "McGrady", 4);
}
这里我们看到了两个很特别的函数:BringtoFront和SendtoBack,这两个函数是什么意思呢?我解释一下:
在MSDN上,它会告诉你这是 :控件发送到Z顺序的后面(SendtoBack)和 控件带到Z顺序的前面 (BringtoFront),那么什么是Z顺序呢?
Windows的窗体界面在水平方向只有X,Y两个方向,而Windows窗体的Z顺序就是桌面上所有窗口的在Z轴上的排列,而控件的Z顺序则是控件所在的父容器上的所有控件的在该父容器得的Z轴上的排列。而这里的意思就是控件相对于父容器(frmQQ)的Z位置,而SendtoBack就是发送到父容器的Z顺序的后边,bringtoFront就是放置到父容器的Z顺序的前面
这里这么做就很显然的意思了,就是先把Button1放在容器(frmQQ)Z顺序的最下边,然后放在容器位置的最上边,(Dock就是锁定控件的位置的),然后将Button2放在容器位置的最下边,然后把它放置在容器Z顺序的下边,那么就代表它放置在Button1的Z顺序的上边。同理可以知道,Button3是放在Button2位置下边,同时又是所有Button的Z顺序的最上边,仅仅在frmQQ的下边,接着,listview有取代frmQQ放置在Button3的上边,这样我们得到Z顺序如下:frmQQ ->Listview1->Button3->Button1->Button2;这个代表什么呢?那么需要和Dock联系起来考虑,Dock的属性就是Z顺序下,谁的Z顺序高,那么Dock上,Z顺序高的控件就会首先处理,其次是次高的,最后是低的。那么由于Button2和Button3都是DockStyle.Bottom属性,但是由于Z顺序的高低,先将ListView应用DockStyle.Botton属性,放置在最下边,然后Button3放到了最底下,然后在再Button3上放置Button2,最后放置Button1。这样就得到了我们预览图的效果,
然后给ListView添加内容。
private void button1_Click(object sender, EventArgs e)
{
listView1.Dock = DockStyle.None;
button1.SendToBack();
button1.Dock = DockStyle.Top;
button2.Dock = DockStyle.Bottom;
button3.SendToBack();
button3.Dock = DockStyle.Bottom;
listView1.BringToFront();
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("pic1", "WyNfee", 0);
listView1.Items.Add("pic2", "Isolate", 1);
listView1.Items.Add("pic3", "Marion", 2);
listView1.Items.Add("pic4", "Carter", 3);
listView1.Items.Add("pic5", "McGrady", 4);
}
Button1的Click事件和Load一致,所以我们这里不再讲述;
private void button2_Click(object sender, EventArgs e)
{
listView1.Dock = DockStyle.None;
button2.SendToBack();
button2.Dock = DockStyle.Top;
button1.SendToBack();
button1.Dock = DockStyle.Top;
button3.Dock = DockStyle.Bottom;
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("pic6", "Antony", 5);
}
通过上面的描述,我们可以获得这样的层级关系:frmQQ->Button1->Button2->Button3->Listview1,然后我们就可以知道Button1放置在容器位置上的最上边,然后是Button2,下面是Listview,然后是Button3,效果如下图:
private void button3_Click(object sender, EventArgs e)
{
listView1.Dock = DockStyle.None;
button3.SendToBack();
button3.Dock = DockStyle.Top;
button2.SendToBack();
button2.Dock = DockStyle.Top;
button1.SendToBack();
button1.Dock = DockStyle.Top;
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("pic5", "Paul", 6);
}
关于Button3的Click事件我就不讲了,大家自己体会就可以明白了...好了,就讲这么多...
下面给出下载地址:
0 评论:
发表评论