KimhillZhang  

在网上抄了两个例子

闪屏说白了就是跟web上面的loading一样的效果。在第一个窗体跳到第二个窗体之间添加一个中间窗体进行过度,等第二个窗体加载完成后中间这个窗体才关闭掉。

例一:

中间窗体: LoadingForm

namespace LoadingFormApp

{

    public partial class LoadingForm : Form

    {

        private static LoadingForm loadingForm = null;

 

        public LoadingForm()

        {

            InitializeComponent();

        }

 

        /// <summary>

        /// 显?示º?窗ä¡ã体¬?

        /// </summary>

        public new static void Show()

        {

            object syncLock = new object();

            lock (syncLock)

            {

                loadingForm = new LoadingForm();

                loadingForm.ShowDialog();

            }

        }

    }

}

主窗体:

 

namespace LoadingFormApp

{

    public partial class MainForm : Form

    {

        public MainForm()

        {

            InitializeComponent();

            // 注Á¡é册¨¢闪¦¨¢屏¨¢(ꡧ等̨¨待äy窗ä¡ã体¬?)ê?

            RegisterLoadingForm();

        }

 

        private void RegisterLoadingForm()

        {

            Thread thread = new Thread(new ThreadStart(LoadingForm.Show));

            thread.Start();

 

            // 主¡Â界?面?加¨®载?初?始º?化¡¥...

            LoadMainForm();

 

            thread.Abort();

            thread.Join();

        }

 

        public void LoadMainForm()

        {

            Thread.Sleep(2000);

        }

    }

}

例二:

中间窗体

namespace LoadingFormDemo2

{

    public partial class LoadingForm : Form

    {

        private static LoadingForm loadingForm = null;

 

        public LoadingForm()

        {

            InitializeComponent();

        }

 

        public static void ShowForm()

        {

            if (null == loadingForm || true == loadingForm.IsDisposed)

                loadingForm = new LoadingForm();

 

            loadingForm.Refresh();

            loadingForm.ShowDialog();

        }

 

        public static void CloseForm()

        {

            if (null != loadingForm && false == loadingForm.IsDisposed)

            {

                loadingForm.Refresh();

                System.Threading.Thread.Sleep(1000);

                loadingForm.Dispose();

            }

        }

    }

}

主窗体

namespace LoadingFormDemo2

{

    public partial class MainForm : Form

    {

        public MainForm()

        {

            InitializeComponent();

        }

 

        private void OnMainFormLoad(object sender, EventArgs e)

        {

            backgroundWorker1.RunWorkerAsync();

            LoadingForm.ShowForm();

        }

 

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

        {

            //程¨¬序¨°处ä|理¤¨ª,ê?加¨®载?数ºy据Y代䨲码?...

            System.Threading.Thread.Sleep(5000);

        }

 

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            LoadingForm.CloseForm();

        }

    }

}

 

这里有个小知识点:public new static void Show()

如果不加new也是可以,只是系统会提示如果是有意隐藏,请使用关键字new

 C#
override重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致 。
new隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。

posted on 2013-06-03 10:30  KimhillZhang  阅读(728)  评论(0编辑  收藏  举报