Windows窗体初始屏幕-加载主窗体时显示窗体
我试图使启动画面先出现,然后启动画面MainForm
出现。但是我在初始屏幕中显示的进度条没有到达进度条的末尾。并且该程序继续运行,无法正常工作。
加载主表单期间如何显示初始屏幕?
我的代码是这样的:
public partial class SplashForm : Form{
public SplashForm()
{
InitializeComponent();
}
private void SplashForm_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Start();
timer1.Interval = 1000;
progressBar1.Maximum = 10;
timer1.Tick += new EventHandler(timer1_Tick);
}
public void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value != 10)
{
progressBar1.Value++;
}
else
{
timer1.Stop();
Application.Exit();
}
}
}
这是的代码的第一部分MainForm
:
public partial class MainForm : Form{
public MainForm()
{
InitializeComponent();
Application.Run(new SplashForm());
}
}
回答:
有多种创建初始屏幕的方法:
您可以依靠的启动画面功能
WindowsFormsApplicationBase
您可以通过在其他UI线程上显示表单并将表单成功加载到主窗口后隐藏起来,来亲自展示实现该功能。
在这篇文章中,我将展示两种解决方案的示例。
注意:那些正在寻找在数据加载期间显示加载窗口或gif动画的人,可以看看这篇文章:在其他线程中加载数据期间显示加载动画
- 添加
Microsoft.VisualBasic.dll
对您的项目的引用。 MyApplication
通过派生来创建一个类WindowsFormsApplicationBase
- 覆盖
OnCreateMainForm
并将您要用作启动表单的表单分配给MainForm
属性。 覆盖
OnCreateSplashScreen
并将要显示为初始屏幕的表单分配给SplashScreen
属性。在您的
Main
方法中,创建的实例MyApplication
并调用其Run
方法。
例
using System;using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true);
var app = new MyApplication();
app.Run(Environment.GetCommandLineArgs());
}
}
public class MyApplication : WindowsFormsApplicationBase
{
protected override void OnCreateMainForm()
{
MainForm = new YourMainForm();
}
protected override void OnCreateSplashScreen()
{
SplashScreen = new YourSplashForm();
}
}
您可以通过在其他UI线程中显示初始屏幕来自己实现此功能。为此,您可以Load
在Program
课堂上订阅主窗体的事件,并在那里显示和关闭初始屏幕。
例
using System;using System.Threading;
using System.Windows.Forms;
static class Program
{
static Form SplashScreen;
static Form MainForm;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Show Splash Form
SplashScreen = new Form();
var splashThread = new Thread(new ThreadStart(
() => Application.Run(SplashScreen)));
splashThread.SetApartmentState(ApartmentState.STA);
splashThread.Start();
//Create and Show Main Form
MainForm = new Form8();
MainForm.Load += MainForm_LoadCompleted;
Application.Run(MainForm);
}
private static void MainForm_LoadCompleted(object sender, EventArgs e)
{
if (SplashScreen != null && !SplashScreen.Disposing && !SplashScreen.IsDisposed)
SplashScreen.Invoke(new Action(() => SplashScreen.Close()));
MainForm.TopMost = true;
MainForm.Activate();
MainForm.TopMost = false;
}
}
注意:要显示平滑的边缘自定义形状的初始屏幕,请查看以下文章:Windows Forms Transparent Background
Image。
以上是 Windows窗体初始屏幕-加载主窗体时显示窗体 的全部内容, 来源链接: utcz.com/qa/400379.html