在开始申请之前显示定时欢迎框
本文关键字:定时 显示 开始 | 更新日期: 2023-09-27 18:35:52
在我需要添加功能之前,我有这一行工作:
public MainForm()
{
InitializeComponent();
refreshUI();
}
然后我需要在显示 MainForm 之前显示一个欢迎框几秒钟。 所以我像这样更改了代码:
System.Threading.Timer timer;
GUI.WelcomeBox welcomeBox;
public MainForm()
{
this.Visible = false;
//Showing welcome box
welcomeBox = new GUI.WelcomeBox();
welcomeBox.Visible = true;
this.Visible = false;
timer = new System.Threading.Timer(new System.Threading.TimerCallback(delayedActions),null,5000,2000);
}
private void delayedActions(object o)
{
welcomeBox.Visible = false;
welcomeBox.Close();
timer.Dispose();
InitializeComponent();
// this line is unreachable, because of error
refreshUI();
}
但在InitializeComponent()
时发生错误: 问题事件名称: CLR20r3
Problem Signature 01: todoweeklyshedule.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 4fc5385b
Problem Signature 04: System.Windows.Forms
Problem Signature 05: 4.0.0.0
Problem Signature 06: 4ba1e14e
Problem Signature 07: a11
Problem Signature 08: 1b
Problem Signature 09: System.ArgumentException
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 1033
Additional Information 1: a1ee
Additional Information 2: a1ee2874cedcaa72f2a8419ddd18697e
Additional Information 3: a319
Additional Information 4: a319510eabcccf7de47b58017b885ff3
顺便说一下,即使this.Visible = false;
行,MainForm 也会显示出来。我已经调用了 MainForm() Application.Run(new MainForm());
这是原因吗?
在调用 InitialiseComponents 之前无法设置可见,您可能会对此进行破解,但您真正的问题是您的代码在错误的位置。
将其全部移至program.cs,并在Application.Run(new MainForm())之前调用它;如果是我,我会将计时器移到欢迎框,让事件处理程序关闭它并以模式显示它。
好吧,实际上这不是真的,如果是我,我不会这样做,因为我知道这会惹恼该应用程序的任何用户。
将初始化对象移动到 this 之前。visible=false;
public MainForm()
{
InitializeComponent();
this.Visible = false;
//Showing welcome box
welcomeBox = new GUI.WelcomeBox();
welcomeBox.Visible = true;
this.Visible = false;
timer = new System.Threading.Timer(new System.Threading.TimerCallback(delayedActions),null,5000,2000);
下一个最好的建议是将欢迎框作为您的主表单,然后将其更改为您的主表单,这将有点重写,但值得。
最后一个建议是加载您的主窗体并将欢迎框调用为 showdialog(),该框在您的计时器告诉它后关闭。