2015-04-28 124 views
0

当表单打开时,是否有任何方法可以立即弹出消息框?我只想在打开时显示一条关于如何使用表单的简短消息。我试过立即在Windows窗体中显示MessageBox?

private void myForm_Load(object sender, EventArgs e) 
{ 
    DialogResult dialogOpen = MessageBox.Show("Use the navigation menu to get started.", "Welcome!", MessageBoxButtons.OK); 
} 

但它不起作用。

+0

是,肯定是有办法,你应该做一个谷歌搜索上 [Form.DialogResult地产(https://msdn.microsoft.com/en-us/library/system.windows .forms.form.dialogresult%28v = vs.110%29.aspx)也阅读了WinForms事件生命周期方面的表单加载显示等等...这里是你需要阅读@MorganPeters [Windows窗体中的事件顺序](https://msdn.microsoft.com/en-us/library/86faxx0d%28v=vs.110%29.aspx) – MethodMan

+5

尝试使用'Shown'事件而不是'Load '。 –

+1

从UX观点来看,我只有2分钱:在我有机会做任何事情之前马上被MessageBox击中会让我想用生锈的叉子撕裂我的眼睛。当然,必须有一个更温和/更好的方式来提示用户?一个彩色的标签,也许? –

回答

0

我不明白为什么它不会在Form_Load中工作。绝对可以像别人指出的那样,通过将它放在表单初始化之下来进行操作。

虽然,因为你只是显示一个消息框,我不认为有任何理由来存储结果,所以一个简单的MessageBox.Show(message);应该做的伎俩。

作为@ s.m。从用户体验的角度来看,一旦应用程序启动,就会立即发出通知,这会非常令人讨厌,至少如果每次都有它的话。就个人而言,我会创建一个布尔值设置变量,在第一次显示消息时将其设置为true,并且只在设置为false时(即第一次显示消息时)才显示它。

private boolean splashShown = Properties.Settings.Default.splashShown; 

private void Form_Load(object sender, EventArgs e) 
{ 
    if (!splashShown) 
    { 
     MessageBox.Show("message"); 
     myForm.Properties.Settings.Default.splashShown = true; 
     myForm.Properties.Settings.Default.Save(); 
    } 
} 

并设置splashShown设置您的表单属性。

如果问题是,你的Form_Load()方法实际上并没有连接到您的Form.Load()事件,你可以双击在设计表单窗口,它会自动创建Form_Load()基方法为你和它连接到Form.Load()事件

3

在Form_Load中显示MessageBox对我来说工作得很好。我直接从原始文章复制/粘贴代码,并且它工作正常。我在Windows 8.1上使用.NET Framework 4.5。

你确定你的Load事件处理程序被调用吗?也许它没有正确地连接到Load事件。

+0

谢谢,它没有被正确调用! –

0

是否有理由使用窗体的Load方法?如果不是,你可以在form的构造函数中使用它。如果您希望在表单加载后立即显示它,则应在表单初始化后在构造函数中执行此操作。它应该是这个样子:

public partial class myForm : Form 
{ 
    public myForm() 
    { 
     InitializeComponent(); 

     DialogResult dialogOpen = MessageBox.Show("Use the navigation menu to get started.", "Welcome!", MessageBoxButtons.OK); 
    } 
} 

构造函数(public myForm())和InitializeComponent();应该会自动由Visual Studio创建后添加到窗体。

+0

尽管此解决方案可能有效,但谨慎地进行非初始化操作。 – Cameron

+0

在这种情况下,显示一个简单的MessageBox应该不是问题,或者我在这里丢失了什么? – DangerousDetlef

0

我已经使用这个,它工作正常。应用程序开始之前先调出消息框。

InitializeComponent(); 
MessageBox.Show("put your message here"); 
0

Form_Load事件发生在表单真正可见之前。 我使用:

static private bool splashShown = false; 
    private void Form1_Activated(object sender, System.EventArgs e) 
    { 
     if (!splashShown) 
     { 
      MessageBox.Show("message"); 
      splashShown = true; 
     } 
    }