1.可以将 Windows 窗体 控件看作是一个复合体,它是由一个可移动的拆分条分隔的两个面板。当鼠标指针悬停在该拆分条上时,指针将相应地改变形状以显示该拆分条是可移动的。
使用 SplitContainer 控件,可以创建复合的用户界面(通常,在一个面板中的选择决定了在另一个面板中显示哪些对象)。这种排列对于显示和浏览信息非常有用。拥有两个面板使您可以聚合不同区域中的信息,并且用户可以轻松地使用拆分条(也称为“拆分器”)调整面板的大小。
另外,还可以嵌套多个 SplitContainer 控件,并且第二个 SplitContainer 控件可以水平放置,从而产生上面板和下面板。
请注意,SplitContainer 控件默认情况下可通过键盘来访问。如果 属性设置为 false,用户可以按箭头键来移动拆分器。
SplitContainer 控件的 属性决定拆分器的方向,而不是决定控件本身的方向。因此,当该属性设置为 时,拆分器将垂直放置,从而产生左面板和右面板。
此外,还应注意 属性的值是随 Orientation 属性的值变化的。有关更多信息,请参见 SplitterRectangle 属性。
还可以限制 SplitContainer 控件的大小和移动。 属性决定调整 SplitContainer 控件大小后,哪个面板将保持原来的大小,IsSplitterFixed 属性则决定是否可以通过键盘或鼠标来移动拆分器。
常用属性、方法和事件
名称 | 说明 |
---|---|
FixedPanel 属性 | 确定调整 SplitContainer 控件大小后,哪个面板将保持原来的大小。 |
IsSplitterFixed 属性 | 确定是否可以使用键盘或鼠标来移动拆分器。 |
Orientation 属性 | 确定拆分器是垂直放置还是水平放置。 |
SplitterDistance 属性 | 确定从左边缘或上边缘到可移动拆分条的距离(以像素为单位)。 |
属性 | 确定用户可以移动拆分器的最短距离(以像素为单位)。 |
属性 | 确定拆分器的厚度(以像素为单位)。 |
事件 | 拆分器移动时发生。 |
事件 | 拆分器移动后发生。 |
2.如何:定义拆分窗口中的大小调整和定位行为
用户可以轻松调整 控件面板的大小并对其执行各种操作。但是,有时您可能要以编程方式控制拆分器放置的位置以及可以移动的程度。
利用 SplitContainer 控件上的 属性和其他属性,您可以根据自己的需要精确控制用户界面的行为。下表列出了这些属性。
名称 | 说明 |
---|---|
属性 | 确定拆分器是否可以通过键盘或鼠标进行移动。 |
属性 | 确定从左边缘或上边缘到可移动拆分条的距离(以像素为单位)。 |
SplitterIncrement 属性 | 确定用户可以移动拆分器的最短距离(以像素为单位)。 |
下面的示例修改了 SplitterIncrement 属性,以创建“对齐拆分器”效果;在用户拖动拆分器时,它会以 10 个像素(而非默认的 1 个像素)为单位进行递增。
定义 SplitContainer 调整大小行为
-
在过程中,将 SplitterIncrement 属性设置为所需大小,以实现拆分器的“对齐”行为。
在下面的代码示例中,在窗体的 事件中将 SplitContainer 控件中的拆分器设置为拖动时跳过 10 个像素。
- C#
private void Form1_Load(System.Object sender, System.EventArgs e) { SplitContainer splitSnapper = new SplitContainer(); splitSnapper.SplitterIncrement = 10; splitSnapper.Dock = DockStyle.Fill; splitSnapper.Parent = this; }
(Visual C#) 在窗体的构造函数中放置以下代码以注册事件处理程序。
C#this.Load += new System.EventHandler(this.Form1_Load); 3.如何:水平拆分窗口
-
水平拆分窗口
-
在程序中,将 SplitContainer 控件的 Orientation 属性设置为 。
- C#
public void showSplitContainer() { SplitContainer splitContainer1 = new SplitContainer (); splitContainer1.BorderStyle = BorderStyle.Fixed3D; splitContainer1.Location = new System.Drawing.Point (74, 20); splitContainer1.Name = "DemoSplitContainer"; splitContainer1.Size = new System.Drawing.Size (212, 435); splitContainer1.TabIndex = 0; splitContainer1.Orientation = Orientation.Horizontal; this.Controls.Add (splitContainer1); }
4.如何:用 Windows 窗体创建多窗格用户界面
在下面的过程中,将创建一个类似于在 Microsoft Outlook 中使用的多窗格用户界面,该界面中包含“文件夹列表”、“邮件”窗格和“预览”窗格。这种排列主要是通过在窗体上停靠控件实现的。
在停靠控件时,可以确定控件要紧靠父容器的哪个边缘。这样,如果将 属性设置为 ,控件的右边缘将停靠在它的父控件的右边缘。此外,控件停靠边缘的大小将调整为与它的容器控件的大小匹配。有关 Dock 属性工作方式的更多信息,请参见。
该过程的重点是在窗体上排列 和其他控件,而不是添加功能以使得应用程序类似于 Microsoft Outlook。
若要创建该用户界面,请将所有控件放到 SplitContainer 控件(其左侧面板中包含 控件)中。SplitContainer 控件的右侧面板中包含另一个 SplitContainer 控件,其中 控件在 控件上方。这些 SplitContainer 控件支持在窗体上分别调整其他控件的大小。可以改编此过程中的方法,制作出您自己的自定义用户界面。
以编程方式创建 Outlook 样式的用户界面
-
在窗体内,声明组成用户界面的每个控件。本示例使用 TreeView、ListView、SplitContainer 和 RichTextBox 控件来创建类似于 Microsoft Outlook 的用户界面。
-
private System.Windows.Forms.TreeView treeView1;private System.Windows.Forms.ListView listView1;private System.Windows.Forms.RichTextBox richTextBox1;private System.Windows.Forms. SplitContainer splitContainer2;private System.Windows.Forms. SplitContainer splitContainer1;
创建定义用户界面的过程。下面的代码设置属性,以使窗体类似于 Microsoft Outlook 的用户界面。但是,通过使用其他控件或使它们停靠在不同的位置,一样可以轻松创建同样灵活的其他用户界面。
public void createOutlookUI(){// Create an instance of each control being used.treeView1 = new System.Windows.Forms.TreeView();listView1 = new System.Windows.Forms.ListView();richTextBox1 = new System.Windows.Forms.RichTextBox();splitContainer2 = new System.Windows.Forms.SplitContainer();splitContainer1 = new System.Windows.Forms.SplitContainer();// Insert code here to hook up event methods.// Set properties of TreeView control.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;treeView1.TabIndex = 0;treeView1.Nodes.Add("treeView");// Set properties of ListView control.listView1.Dock = System.Windows.Forms.DockStyle.Top;listView1.TabIndex = 2;listView1.Items.Add("listView");// Set properties of RichTextBox control.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;richTextBox1.TabIndex = 3;richTextBox1.Text = "richTextBox1";// Set properties of first SplitContainer control.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fil1;splitContainer2.TabIndex = 1;splitContainer2.SplitterWidth = 4;splitContainer2.SplitterDistance = 150;splitContainer2.Orientation = Orientation.Horizontal;splitContainer2.Panel1.Controls.Add(this.listView1);splitContainer2.Panel1.Controls.Add(this.richTextBox1);// Set properties of second SplitContainer control.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fil1;splitContainer2.TabIndex = 4;splitContainer2.SplitterWidth = 4;splitContainer2.SplitterDistance = 100;splitContainer2.Panel1.Controls.Add(this.treeView1);splitContainer2.Panel1.Controls.Add(this.splitContainer1);// Add the main SplitContainer control to the form.this.Controls.Add(this.splitContainer2);this.Text = "Intricate UI Example";}在 Visual Basic 中,添加对在 过程中刚创建的过程的调用。在 Visual C# 中,将这行代码添加到窗体类的构造函数。