c# - 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

标签 c# winforms user-experience

我想在应用程序启动时加载欢迎屏幕,然后用户单击欢迎屏幕上的按钮,然后关闭欢迎屏幕。最后显示主屏幕。

static void Main() //startup method being called
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new ACM812_DB()); // welcome screen
}

当单击欢迎屏幕上的按钮时,它会隐藏欢迎窗口,然后打开主窗口。如下图。

private void button1_Click(object sender, EventArgs e)
{
   Form1 form1 = new Form1();
   form1.Show(); // main window
   this.Hide();
}

它确实工作成功,但这是实现此目的的正确方法吗?

更新的代码:

主窗体启动(MainForm.cs)

namespace System
{
  public partial class MainForm : Form
  {
     private void MainForm_Load(object sender, EventArgs e)
     {
        WelcomeForm.Run(this);
     }

     public MainForm()
     {
        InitializeComponent();
     }

   }
 }

然后调用欢迎屏幕

public partial class WelcomeForm : Form
{
    static private Form Sender;

    static public void Run(Form sender)
    {
      if (sender == null) 
      throw new ArgumentNullException();
      Sender = sender;
      new WelcomeForm().ShowDialog();
    }

    private void ButtonClose_Click(object sender, EventArgs e)
    {
      Close();
    }
}

最佳答案

这并不是一个好的模式。

因为应用程序实例是为了管理主窗体,所以主窗体在应用程序退出之前一直处于“事件状态”。

您可以在主表单加载中将欢迎屏幕显示为对话框:

MainForm.cs

private void MainForm_Load(object sender, EventArgs e)
{
  WelcomeForm.Run(this);
}

WelcomeForm.cs

public partial class WelcomeForm : Form
{
  static private Form Sender;
  static public void Run(Form sender)
  {
    if (sender == null) 
      throw new ArgumentNullException();
    Sender = sender;
    new WelcomeForm().ShowDialog();
  }
  private void ButtonClose_Click(object sender, EventArgs e)
  {
    Close();
  }
}

因此欢迎屏幕可以控制主窗体并设置所需的任何公共(public)数据。

MainForm 在 Main 方法中创建,并由 Application 实例进行控制。因此,MainForm 的加载事件被调用,最后调用WelcomeForm 的Run 静态方法,该方法创建一个实例并将其显示为对话框。这将停止尚未显示的 MainForm,直到欢迎屏幕关闭。然后就可以显示MainForm了。

这是众多方法中的一种,但如果它符合您的目标,那么它很简单。

关于c# - 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62740385/

相关文章:

user-interface - 如何向用户显示无穷大

c# - 在ASP.NET C#中读取表单变量时出现问题

c# - 如何从 C# 中的 TabPage 获取控件?

c# - 您如何获得在声明中实际输入的变量名称?

c# - DataGridView 验证 - 删除错误指示器

c# - 类似于控制台的控件,允许完全控制单个文本格式

user-interface - 哪些网站包含用户界面设计的良好示例?

php - 处理级联碰撞?

c# - IEnumerator 在使用 IEnumerator 每 0.5 秒生成一个敌人时不断崩溃

c# - 即使数据库中有数据,ExecuteScalar() 也始终返回 NULL