1.4 C#如何展现一个WINDOWS窗体

来源:互联网 发布:e网络分销管理系统 编辑:程序博客网 时间:2024/05/29 07:25

1、首先让我们来看一段代码

namespace WindowsFormsApplication2

{

    static class Program

    {

       static void Main()

        {

            Form1 frm = new Form1();

            frm.Show();

        }

    }

}

上面代码实例化了一个Form1对象,然后用Show()方法展现出来,但是只能在屏幕上生成一个一闪而过的windows窗体。 因为程序是顺序执行的,执行完frm.Show()这条语句后,程序接着向下执行就结束了,当然不能展现一个持久的窗体。这不是我们所希望的。我们想要一个窗体在屏幕上一直存在,直到关闭它。

 

2、那么现在在frm.Show()代码下面加点东西阻止它直接运行到结束

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Threading;

namespace WindowsFormsApplication2

{

    static class Program

    {

      

        static void Main()

        {

         

            Form1 frm = new Form1();

            frm.Show();

            Thread.Sleep(2000);

        }

    }

}

红色代码为加上的语句,让程序暂时休息2秒种。

Thread类要在程序头引用using System.Threading;才行。

这样,frm 这个窗体会在屏幕上停留2秒,程序才消失。

 

3、好吧,想个办法在frm.Show()下塞个东西让它一辈子都不能主动运行到程序未尾,我们加个无限循环语句在下面试试

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Threading;

namespace WindowsFormsApplication2

{

    static class Program

    {

   

        static void Main()

        {

            Form1 frm = new Form1();

            frm.Show();

            while(true)

            {  }

        }

    }

}

哈哈,加了个条件为真的无限循环,这下窗体真的停留下来了,窗体被循环语句阻档住再也不能向下顺序执行了。但是我们发现一个重大的问题,程序的可执行时间被这个循环耗尽了,程序一但执行,窗体就死在屏幕上了,一动也不能动,全部程序时间都在死循环内不停消耗出不来了。这不是我们想要的效果,那么怎么办呢?我想要在下面插入一种循环。它有这样的功能,不能让程序结束,自已也不能把程序的时间全占用掉,要分给整个程序一部分时间,这种功能让我们想到了VC中的消息循环机制。

 

4C#中也有类似的东西,这就是Application.Run();

 

  static void Main()

        {

            Form1 frm = new Form1();

            frm.Show();

            Application.Run();

        }

好了,在下面加上这句代码后,Application.Run();这就是一个消息循环,把窗体代码挡住不至于执行结束。而且这个消息循环也不占用全部时间片,而是把一部分时间让给程序用,这样整个程序不至于死在屏幕上。 OK,程序执行后,很好,窗体停在屏幕上,可以自由移动。 我们试着关闭窗体,发现窗体可以关闭, 但是问题也就来了,重新执行一下程序,发现出错了,不让执行。原来窗体是关闭了,但是整个程序没有停止运行,它还在后台继续运行。因为窗体关闭,只是窗体线程停止运行,但是程序的主线程,也就是这个Application.Run();循环,还在运行。这不是我们想要的,我们希望一关闭窗体,整个程序全部结束。

 

5、还好C#提供了这样的功能,很简单可以实现

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Threading;

namespace WindowsFormsApplication2

{

    static class Program

    {

   

        static void Main()

        {

        

            Form1 frm = new Form1();

            //frm.Show();

            frm.Visible = true;

            Application.Run(frm);

         

        }

    }

}

frm窗体实例作为参数传递给Application.Run(frm);即可,由Application.Run来保证当窗体关闭时,消息循环结束,整个程序结束。

6、另外要说一点在解决方案中存在多个项目时,要设置某个项目为启动项目,只需右键单击此项目,选择成为启动项目即可。但是启动窗口的设置没有这种快捷方式。

  Application.Run(frm);中当参数的窗体就是主窗体,也就是启动窗体,如果一个项目中有多个窗体,要把哪一个窗体当启动窗体,就必须把哪个窗体的实例对象传递到Application.Run()中。

 

 

原创粉丝点击