我正在创建一个包含首次运行检查的winform应用程序。我一直关注这两篇文章:
首先运行检查应该检查应用程序是否曾经运行过,如果没有运行,它应该向用户显示一些消息。 我遇到的问题是,在初始化/显示winform应用程序之前显示此消息,我无法找到原因。 这是我的代码:
Program.cs的
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Form1.cs的
public Form1()
{
this.InitializeComponent();
CheckFirstRun();
}
private static void CheckFirstRun()
{
if(Settings.Default.FirstRun)
{
MessageBox.Show(
"First run");
Settings.Default.FirstRun = false;
Settings.Default.Save();
}
它显示带有msg的消息框:“首次运行”,单击“确定”按钮后显示WinForm。我想要实现的是首先显示WinForm,如果是第一次运行,则显示此msgBox。
有什么想法吗?
答案 0 :(得分:3)
您可以将其称为Form.Shown
,而不是从构造函数中调用CheckFirstRun()
仅在第一次显示表单时引发显示事件; 随后最小化,最大化,恢复,隐藏,显示或 无效和重新绘制不会引发此事件
private void Form1_Shown(Object sender, EventArgs e)
{
CheckFirstRun();
}
覆盖OnShown
OnShown方法还允许派生类在不附加委托的情况下处理事件。这是在派生类MSDN
中处理事件的首选技术对继承者的说明 在派生类中重写OnShown时,请务必调用基类的OnShown方法,以便已注册的委托接收事件MSDN。
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
CheckFirstRun();
}
答案 1 :(得分:1)
从OnShown
方法拨打CheckFirstRun
。
只要首次显示表单,就会出现“已显示”事件。
[...]
OnShown方法还允许派生类在没有的情况下处理事件 附上一名代表。这是处理的首选技术 派生类中的事件。
public Form1()
{
this.InitializeComponent();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
CheckFirstRun();
}
private static void CheckFirstRun()
{
if(Settings.Default.FirstRun)
{
MessageBox.Show(
"First run");
Settings.Default.FirstRun = false;
Settings.Default.Save();
}
}
答案 2 :(得分:0)
使用此事件在表单加载后触发事件。
private void Form1_Shown(Object sender, EventArgs e) {
MessageBox.Show("First run.");
}