【问题标题】:How to show a welcome screen before the main screen of a winforms application is shown?如何在显示 winforms 应用程序的主屏幕之前显示欢迎屏幕?
【发布时间】:2020-07-06 21:18:32
【问题描述】:

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

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();
    }
}

【问题讨论】:

    标签: c# winforms user-experience


    【解决方案1】:

    不是一个很好的模式。

    因为应用程序实例用于管理主窗体,该主窗体在应用程序退出之前一直处于“活动状态”。

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

    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();
      }
    }
    

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

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

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

    【讨论】:

    • 所以基本上从 MainForm.cs 启动应用程序。但是不应该在 WelcomeForm.cs 中新的 Form1().Show() 应该在 button_click 事件中吗?
    • 我更正了 Form1 而不是 WelcomeForm 的输入错误,抱歉。是的,一旦在欢迎屏幕中单击按钮关闭(显示为对话框),就会出现主窗体。
    • 您的回答仍然感到困惑,这表明在主窗体上单击按钮时会加载欢迎屏幕。但我的问题是,我想先加载欢迎屏幕,然后在欢迎屏幕上单击一个按钮,然后将您带到主窗体。
    • 我添加了一个解释。
    • 您应该从加载事件而不是构造函数或 InitializeComponent 之前调用 WelcomeForm.Run。 ButtonClose_click 用于欢迎屏幕,因此是正确的(答案代码已更正)。
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多