2.2.3 工具箱窗口
在将来的章节中,我们并不会描述向窗体添加控件以及在Windows窗体设计器中设置控件属性的具体做法。因此,读者要确保理解这里所描述的过程。回顾第1章,我们在窗体中添加了1个Button控件和1个PictureBox控件。我们在将下来的几个步骤中用Visual Studio来完成相同的任务。
![]() |
现在,这2个控件已经出现在窗体上。在默认情况下,每个控件是根据它的类型来命名的。Button控件被命名为button1,PictureBox控件被命名为pictureBox1。Visual Studio用类名加一个编号为新控件命名。添加到窗体中的第2个Button控件将被命名为button2,接下来以此类推。和本章前面的Form1类一样,我们希望为这些控件提供更具描述性的名称。因此,我们将会对这些控件进行重命名。
另外,我们需要设置这2个控件的属性,与第1章所进行的设置相似。由于我们已经以图形的方式设置了控件的位置和大小,因此不再需要对诸如Left和Height这样的位置属性进行设置。在第1章中,我们还把按钮的Text属性设置为“&Load”,把图片框的BorderStyle和SizeMode属性分别设置为Fixed3D和Zoom。
Visual Studio提供了一个特殊的“属性”窗口,我们可以通过这个窗口查看和修改控件的属性和名称。我们将使用这个窗口来更新这2个控件,作为前面步骤的继续。
![]() |
![]() |
a. 当然,从技术上说,(Name)并不是属性。它仅仅表示在代码中为变量所分配的名称。由于它出现在属性窗口中,为了简单起见,我们也把它称为属性。
在编译和运行这个程序之前,我们首先看看Visual Studio针对我们的操作对源代码所进行的修改。现在,文件名是MainForm.Designer.cs文件,与我们所重命名的MainForm.cs类文件匹配。程序清单2-4显示了定义InitializeComponent方法的代码区域,我们可以把它与程序清单2-3中的对应代码进行比较。代码中带标号的要点值得进行另外的讨论。
![]() |
![]() |
① InitializeComponent方法创建了这个程序所需的类实例,并准备为每个对象进行初始化。正如我们在第1章所讨论的那样,所有的控件都是类。new关键字创建了每个控件的实际对象。所有的控件提供了布局逻辑,以便在窗体上渲染控件。SuspendLayout方法推迟这种逻辑,直到调用ResumeLayout方法。否则,控件可能会被渲染成不完整的样子。有些控件,包括PictureBox类,还提供了ISupportInitialize接口(我们将在第5章讨论接口),允许控件对多个相关属性的修改进行优化。这一般可以防止每次修改属性时重新计算复杂或开销较大的显示逻辑。
② 在Windows窗体设计器中设计的所有属性都是在一个单独的区域中设置的,每个控件都有这样的一个区域。Name属性总是被设置为控件的变量名。TabIndex属性也会被赋值,从0开始,以建立窗体上控件的顺序。其他属性也根据需要进行了赋值。
③ 每个控件的Size和Location属性也是由Windows窗体设计器定义的。这2个设置是用System.Drawing命名空间中的Point和Size这样的结构定义的。结构和类不同,它是一种值类型,因此new语句在堆栈上创建这些对象,并把它们的值复制给适当的属性。
④ 在窗体上的所有控件都被创建并初始化之后,InitializeComponent方法使用Add方法把每个控件添加到窗体本身,保存在Form.Controls属性中。正如第1章所讨论的那样,Form.Controls属性是窗体的控件集合,它允许在这个集合中添加控件或删除控件。控件的添加顺序决定了控件在窗体中的Z顺序。另外,注意在PictureBox控件结束初始化之后,Form对象的布局逻辑也被恢复。在本书以后的讨论中,我们会更详细地解释这些要点。
⑤ 在这个文件的底部,在InitializeComponent方法的区域之后,定义了表示控件的变量。我们知道,C++的类变量必须在使用之前定义。C#在这个问题上采取了整体考虑的策略,允许C#中的类变量或字段在使用之前或使用之后定义,甚至允许在一个独立的部分类文件中定义,只要它出现在这个类的某个地方。
当我们完成了对这些代码的回顾之后,就可以像以前一样编译并运行这个程序。和第1章1.2版本的MyForm应用程序一样,这个版本的应用程序显示了这些控件,但并不允许用户通过这些控件执行任何操作。我们的下一个主题是允许用户加载图像。
| 回书目 上一节 下一节 |
|
· 第六章 你能帮我吗?.. · Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. |
· 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||