1.12 设置窗体大小
用户打开软件后首先看到的就是窗体和窗体上的控件,如何设置窗体的大小及合理的设置窗体和控件的关系就变得十分重要,下面的实例将介绍这方面的知识。
实例040 限制窗体大小
实例说明
Windows窗体是可以随意改变大小的,然而对于一些要求严格的窗体,开发人员不希望用户随意的改变其大小,例如,定位准确的地图和游戏软件等。遇到这种情况必须对窗口的大小进行一些限制。本例设计一个限制了大小的窗体,用户虽然可以改变其大小,但是,大小的范围是受到限制的。实例效果如图1.40所示。
技术要点
在此C#中实现限制大小非常方便,只要设置窗体的最大和最小范围即可。下面介绍一下相关属性。
Form.MinimumSize属性用来获取或设置窗体可调整到的最小大小,其语法格式如下:
public override Size MinimumSize { get; set; }
l 属性值:Size,表示该窗体的最小大小。
Form.MaximumSize属性用来获取或设置窗体可调整到的最大大小,其语法格式如下:
public override Size MaximumSize{ get; set; }
l 属性值:Size,表示该窗体的最大大小。
实现过程
(1)创建一个项目,将其命名为Ex01_27,默认窗体为Form1。
(2)主要程序代码。
private void Form1_Load(object sender, EventArgs e)
{
MinimumSize = new Size(200, 200);
MaximumSize = new Size(400, 400);
}
举一反三
根据本实例,读者可以开发以下程序。
在窗体显示时规定其大小。
在窗体运行时规定其大小。
实例041 获取桌面大小
实例说明
获取桌面分辨率可以使用API函数GetDeviceCaps,但API函数参数较多,使用不方便,如何更方便的获取桌面分辨率呢?在本例中,通过读取Screen对象的属性,来获取桌面分辨率信息,以像素为单位。运行本例,效果如图1.41所示。

技术要点
C#中提供了Screen对象,在该对象中封装了屏幕相关信息。可以通过读取Screen对象的相关属性,来获取屏幕的信息,Screen.PrimaryScreen.WorkingArea.Width用于读取桌面宽度;Screen.PrimaryScreen.WorkingArea.Height可以读取桌面的高度。下面介绍一下相关属性。
Screen.PrimaryScreen.WorkingArea属性用于获取显示器的工作区。工作区是显示器的桌面区域,不包括任务栏、停靠窗口和停靠工具栏。其结构如下:
public Rectangle WorkingArea { get; }
l 属性值:一个Rectangle,表示显示器的工作区。
实现过程
(1)创建一个项目,将其命名为Ex01_41,默认窗体为Form1。
(2)在Form1窗体上添加一个Button控件,用来获取桌面大小;添加两个TextBox控件,用来输出所获取的桌面大小。
(3)主要程序代码。
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = Screen.PrimaryScreen.WorkingArea.Height.ToString( );
textBox1.Text = Screen.PrimaryScreen.WorkingArea.Width.ToString( );
}
举一反三
根据本实例,读者可以开发以下程序。
根据显示器的分辨率信息设置窗体大小及位置。
根据显示器的分辨率信息调整窗体界面。
实例042 在窗口间移动按扭
实例说明
窗体中每个可视控件都有所有者和父对象两个重要属性,所有者是控件建立时指定的所属对象,该对象可以是不可视控件,而父对象必须是可视控件。因此可以通过窗体中可视控件的Parent属性来判断控件是否在这个窗体中,还可以用Form.Controls.Add( )方法为窗体添加控件。本例以一个可以在窗口间移动的按钮来演示父对象改变后的运行效果。运行本例,在窗口中单击按钮,按钮就会移动到另外一个窗口中。实例效果如图1.42和图1.43所示。

图1.42 在窗口间移动按钮 图1.43 在窗口间移动按钮
技术要点
可视控件包含一个Parent属性,该属性表示控件的父对象。一般将此属性设置为一个窗口。通过该属性可以控制所属窗体。
实现过程
(1)创建一个项目,将其命名为Ex01_42,默认窗体为Form1。
(2)添加一个窗体,默认窗体的Name属性为Form2。
(3)在Form1窗口中添加一个Button控件。并为Form1和Form2设置背景图片。
(4)主要程序代码。
单击按钮在两个窗体之间移动,具体代码如下:
private void button1_Click(object sender, EventArgs e)
{
if (button1.Parent == this)
{
f.Controls.Add(this.button1);
this.button1.Text = "返回原地";
}
else
{
this.Controls.Add(button1);
this.button1.Text = "开始移动";
}
}
Form1窗体加载时同时显示Form2窗体,具体代码如下:
private void Form1_Load(object sender, EventArgs e)
{
f = new Form2( );
f.Show( );
}
举一反三
根据本实例,读者可以开发以下程序。
试做从一个窗体将控件拖到另一个窗体。
试做用一个窗体控制另一个窗体。
实例043 如何实现Office助手
实例说明
用过Office的人都知道,Office助手是一个非常漂亮的小工具,有了它,即使对Office不太熟悉的用户也可以操作自如。本实例使用C#制作了一个类似Office助手的程序,实例效果如图1.44所示。
技术要点
要实现Office助手效果,需要使用Microsoft提供的第3方控件。在工具箱中单击“选择项”,从弹出的对话框中选择COM组件选项卡中的Microsoft Agent Control 2.0组件并加入工具箱中,然后再添加到窗体中。
实现过程
(1)创建一个项目,将其命名为Ex01_43,默认窗体为Form1。
(2)在Form1窗体上添加一个ListBox控件用来让用户选择人物的动作。
(3)主要程序代码。
声明成员变量及字符串数组,具体代码如下:
IAgentCtlCharacterEx ICCE;
IAgentCtlRequest ICR;
string[] ws = new string[10] { "Acknowledge", "LookDown", "Sad", "Alert", "LookDownBlink", "Search", "Announce", "LookUp", "Think", "Blink"};
为ListBox添加选项的实现代码如下:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(ws[i]);
}
ICR = axAgent1.Characters.Load("merlin", "merlin.acs");
ICCE = axAgent1.Characters.Character("merlin");
ICCE.Show(0);
}
随着选项改变Office表情的实现代码如下:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ICCE.StopAll("");
ICCE.Play(ws[listBox1.SelectedIndex]);
}
举一反三
根据本实例,读者可以实现以下程序。
瑞星助手。
在自己的程序中加入Office助手。





