本文转自:http://www.rainsts.net/article.asp?id=489
今天不小心遇到一个有点弱智的问题,当然这个问题基本对你没有任何影响。
.NET FX 2.0 WinForm 提供了 Application.OpenForms 属性,便于我们获取已 "打开" 的窗体。相信下面的代码你非常熟悉。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form form = Application.OpenForms["form2"]; if (form == null) { form = new Form2(); } form.Show(); form.BringToFront(); } }
这代码会有问题吗?跟着我做……
创建 WinForm 项目,然后创建 Form1、Form2 两个窗体,在 Form1 上添加一个按钮,然后输入上述事件代码。注意,我们目前没有修改任何 Form2 的设置。运行一下,多次点击按钮,你看到了什么? 这就是我说的问题,Form2 被多次创建,也就是说 Application.OpenForms["form2"] 始终返回 null。怎么会这样?打开 Form2.Designer.cs,看看 InitializeComponent()。
private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form2"; }
倒~~~~ 自动生成的代码根本没有 this.Name="Form2"。一旦更改 Form2.Size 或其他属性,代码才会变成下面这样。
private void InitializeComponent() { this.SuspendLayout(); // // Form2 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(711, 427); this.Name = "Form2"; this.Text = "Form2"; this.ResumeLayout(false); }
好了,小笑话到此结束。本文没有多大实际意义,纯粹搞笑~~~~~~