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动画的人,可以看看这篇文章:在其他线程中加载数据期间显示加载动画

  1. 添加Microsoft.VisualBasic.dll对您的项目的引用。
  2. MyApplication通过派生来创建一个类WindowsFormsApplicationBase
  3. 覆盖OnCreateMainForm并将您要用作启动表单的表单分配给MainForm属性。
  4. 覆盖OnCreateSplashScreen并将要显示为初始屏幕的表单分配给SplashScreen属性。

  5. 在您的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线程中显示初始屏幕来自己实现此功能。为此,您可以LoadProgram课堂上订阅主窗体的事件,并在那里显示和关闭初始屏幕。

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

回到顶部