Application.OpenForms

本文转自: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);



}


好了,小笑话到此结束。本文没有多大实际意义,纯粹搞笑~~~~~~

你可能感兴趣的:(application)