gpt4 book ai didi

c# - Windows 窗体启动画面 - 在加载主窗体时显示窗体

转载 作者:行者123 更新时间:2023-12-03 15:18:00 26 4
gpt4 key购买 nike

我试图让闪屏先出现,然后在闪屏后出现 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 线程上显示一个表单并在 main 成功加载后隐藏它来展示自己实现该功能。

  • 在这篇文章中,我将展示这两种解决方案的示例。

    Note: Those who are looking for showing a loading window or a loading gif animation during loading of data, can take a look at this post: Show Loading animation during loading data in other thread



    选项 1 - 使用 WindowsFormsApplicationBase 启动画面功能
  • 添加 Microsoft.VisualBasic.dll 的引用到您的项目。
  • 创建一个 MyApplication WindowsFormsApplicationBase 派生的类
  • 覆盖 OnCreateMainForm 并将您想要作为启动表单的 from 分配给 MainForm属性(property)。
  • 覆盖 OnCreateSplashScreen 并将要显示为闪屏的表单分配给 SplashScreen属性(property)。
  • 在您的 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();
    }
    }

    选项 2 - 使用不同的 UI 线程实现该功能

    您可以通过在不同的 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;
    }
    }

    Note: To show a smooth edge custom shaped splash screen take a look at this post: Windows Forms Transparent Background Image.

    关于c# - Windows 窗体启动画面 - 在加载主窗体时显示窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32418695/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com