介绍 这一小段代码可以为您提供一个非常漂亮的启动屏幕!它易于操作且重量轻,因此适用于每个系统。 背景 我花了很长时间寻找合适的splashscreen方法,但我发现所有这些方法都太短,太复杂,或者根本不起作用。我决定找到我自己的鬼鬼祟祟的方法得到一个splashscreen,结果很好!您可以下载我为Visual Studio 2008编写的代码,或者阅读我解释如何快速轻松地完成的文章。 使用的代码 首先,我们从一个新项目(Windows Forms application)开始。在创建项目之后,我们有一个默认的表单,称为“Form1”。我将这个表单重命名为“MainForm”。 我们现在改变了MainForm的一些属性:将“不透明度”设置为“0%”,将“ShowInTaskbar”设置为“False”。如果你想,你也可以改变“StartPosition”为“CenterScreen”。 现在添加另一个表单,称为“SplashScreen”。只需在解决方案资源管理器中右键单击您的项目,进入“添加”,然后进入“Windows窗体…”。对于这个新表单,我们改变了一些属性:“BackgroundImage”->把你的闪屏图像(选择本地资源)放在这里(黑色背景的透明度)。“FormBorderStyle”设置为“None”,“不透明度”设置为“0%”,“ShowInTaskbar”设置为“False”,“TransparancyKey”设置为(在本例中)“黑色” 调整splashscreen大小以获得窗体中的整个splashscreen。 现在我们将把代码添加到splashscreen: 隐藏,复制Code
using System.Threading;
在这种形式下,我们需要的唯一函数是: 隐藏,复制Code
public SplashScreen() { InitializeComponent(); System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false; } public void OpacityUP() { for (double i = 0; i <= 100; i++) { this.Opacity = i / 100; Thread.Sleep(20); } }
不检查非法的跨线程调用将使您能够从一个线程控制表单,这正是我们所需要的。函数“OpacityUP”将是实际的线程,将运行和添加一个平滑淡入! 接下来,我们将在MainForm中添加一个计时器,并确保它是启用的。在创建计时器之后,只需双击它来自动创建事件代码。现在我们正在编辑MainForm的代码,我们还需要添加线程支持: 隐藏,复制Code
using System.Threading;
让我们添加计时器代码: 隐藏,复制Code
private void ATimer_Tick(object sender, EventArgs e) { ATimer.Enabled = false; SplashScreen splash = new SplashScreen(); splash.Show(); System.OperatingSystem osInfo = System.Environment.OSVersion; if (!(osInfo.Version.Major <= 5)) { Thread th = new Thread(new ThreadStart(splash.OpacityUP)); th.Start(); Thread.Sleep(4200); th.Abort(); } else { splash.Opacity = 1; Thread.Sleep(4200); } splash.Close(); this.ShowInTaskbar = true; this.Opacity = 1; }
一个快速的解释: 在用主窗体启动计时器后,它将被直接禁用(因为这是我能想到的自销毁线程的唯一方式(不完全是真的))。计时器最终只需要运行一次。有点计时器滥用!我们创建一个名为“splash”的对象并打开它。由于Windows XP的一个问题,它是不可能做淡入与透明度。据说它在Vista和更高版本上运行得很好。为了测试这一点,我获得了关于它是哪个版本的系统信息。版本5是Windows XP或2000;在这种情况下,我们会保留淡入,然后立即弹出。在启动之后(当我们已经中断线程时),splashscreen将关闭,突然主窗体将可见并显示在任务栏中。 的兴趣点 我真的没学到什么……只是尝试使用c#并找到一个狡猾的方法来创建一个简单的splashscreen:)(我尝试了20多个不同的想法)。 历史 版本1是最新版本! 本文转载于:http://www.diyabc.com/frontweb/news11140.html