zoukankan      html  css  js  c++  java
  • C#下实现软件欢迎界面

    找到几种简约的欢迎界面的制作方法,存此记录。

     

    方法一:双线程,用第二个线程启动欢迎界面

    原文:http://www.cnblogs.com/xiaoshatian/archive/2010/09/07/1820526.html

    一个很简单的窗体,它只包含一个Style=Marquee的ProgressBar(这个进度条会不断滚动),下面是它的代码以及注释:

     

    public partial class Splash : Form
    {
         public Splash()
         {
             InitializeComponent();
         }
         //关闭自身
         public void KillMe(object o, EventArgs e)
         {
             this.Close();
         }
         /// <summary>
         /// 加载并显示主窗体
         /// </summary>
         /// <param name="form">主窗体</param>
         public static void LoadAndRun(Form form)
         {
             //订阅主窗体的句柄创建事件
             form.HandleCreated += delegate
             {
                 //启动新线程来显示Splash窗体
                 new Thread(new ThreadStart(delegate
                 {
                     Splash splash = new Splash();
                     //订阅主窗体的Shown事件
                     form.Shown += delegate
                     {
                         //通知Splash窗体关闭自身
                         splash.Invoke(new EventHandler(splash.KillMe));
                         splash.Dispose();
                     };
                     //显示Splash窗体
                     Application.Run(splash);
                 })).Start();
             };
             //显示主窗体
             Application.Run(form);
         }

     

     

    代码很好理解,Splash类只包含两个方法:一个普通的事件处理程序KillMe和一个静态方法LoadAndRun。LoadAndRun方法用于加载并显示主窗体。在加载主窗体的同时,Splash窗体也会一直显示,直到主窗体加载完毕可以完全显示为止。使用此加载窗体的方法也很简单,只需要把Program.cs中Main方法里的

     

    Application.Run(new Form1());

     

    修改为

     

    Splash.LoadAndRun(new Form1());

     

    即可。

    如果想要看到效果,可以在Form1的OnLoad事件中让主线程睡一会儿觉,譬如:

     

    protected override void OnLoad(EventArgs e)
     {
         System.Threading.Thread.Sleep(5000);
         base.OnLoad(e);
     } 

     

    为什么要在新线程中显示加载窗体呢?因为忙碌的主窗体已经占有了主线程,如果把加载窗体也安排到主线程的话,它不仅很容易变成“失去响应”的状态,而且有可能连自身都无法顺利加载完,更别说不断滚动的进度条了。

    另外,这种方法还有一个缺点,如果主窗体加载缓慢是因为在构造函数中执行了大量操作的话,那么这种方法就起不到作用了。

    不过话说回来,在窗体的构造函数中执行影响性能的操作本来就是不被推荐的做法,应当尽量避免。

     

    其他相关文章:

    [转]WinForm下Splash(启动画面)制作

    http://www.cnblogs.com/huaiyu2006/archive/2008/11/26/1341466.html

     

    方法二:较简单的一种,在主界面程序中创建一个新窗口做欢迎界面,适合像我这样的新手。

    第一步: 主程序启动主窗体(这里表示为 form1)

    代码如下:

    static class Program
      {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          Application.Run(new Form1());
        }
      }

     

    第二步: 主窗体(form1) 中的 _Load 事件中启动欢迎界面 (form2)

      如下:

    private void Form1_Load(object sender, EventArgs e)
        {
          //启动窗体
          Form2 MySplashForm = new Form2();
          MySplashForm.ShowDialog();
        }

     

    第三步: 欢迎界面中控制界面的显示方式并使用 timer 控制欢迎界面的消失时间

      如下:

    private void Form2_Load(object sender, EventArgs e)
        {
          //设置启动窗体
          this.FormBorderStyle = FormBorderStyle.None;
          this.BackgroundImage = Image.FromFile("test.jpg");
          this.timer1.Start();
          this.timer1.Interval = 10000;  

             //我觉得这里设置4000就足够了,别太装B,本来这种方法就是适合小

         //程序,根本不存在所谓的程序加载,还设置10s不是找抽咩?!
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
          //停止计时器

          this.timer1.Stop();
          //关闭启动窗体
          this.Close();
        }

     

    ==========================The End=========================

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6261834.html
Copyright © 2011-2022 走看看