【问题标题】:Show MessageBox immediately in Windows Forms?在 Windows 窗体中立即显示 MessageBox?
【发布时间】:2015-04-28 21:19:33
【问题描述】:

有什么方法可以在打开表单时立即弹出消息框?我只想在表单打开时显示一条关于如何使用表单的短消息。我试过了

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

但它不起作用。

【问题讨论】:

  • 是的,绝对有一种方法你应该在Form.DialogResult Property 上进行谷歌搜索,还阅读有关显示表单加载顺序等的 winforms 事件生命周期......这里是您需要阅读的地方@MorganPeters Order of Events in Windows Forms
  • 尝试使用Shown 事件而不是Load
  • 从用户体验的角度来看只是我的 2 美分:在我有机会做任何事情之前就被 MessageBox 击中会让我想用生锈的叉子挖掉我的眼睛。当然必须有一种更温和/更好的方式来给用户提示?可能是彩色标签?
  • @s。米。你绝对是对的!我大多只是在尝试,想看看它是如何工作的。我最终决定改为添加一个“帮助”菜单项。

标签: c# windows forms winforms


【解决方案1】:

在 Form_Load 期间显示 MessageBox 对我来说效果很好。我从字面上复制/粘贴了您原始帖子中的代码,并且有效。我在 Windows 8.1 上使用 .NET Framework 4.5。

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

【讨论】:

    【解决方案2】:

    我不明白为什么它在 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】:

      是否有理由使用表单的 Load 方法?如果没有,您可以在表单的构造函数中使用它。如果您希望它在表单加载后立即显示,您应该在表单初始化后在构造函数中执行此操作。它应该看起来像这样:

      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 自动添加到表单中。

      【讨论】:

      • 虽然此解决方案可能有效,但请谨慎执行非初始化操作。
      • 在这种情况下,显示一个简单的 MessageBox 应该不成问题,还是我在这里遗漏了什么?
      【解决方案4】:

      我用过这个,效果很好。应用启动首先会打开消息框。

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-22
          相关资源
          最近更新 更多