C#中的Windows窗体应用程序立即关闭

时间:2011-04-21 04:32:47

标签: c#

我刚开始使用C#编程,我正在尝试使我的Windows窗体应用程序正常运行。但是,每当我运行它时,它就会立即打开并关闭。每当我在Java中键入类似的代码时,GUI都没有问题。我在这里想念一些小事吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Form1_FormClosing();
    }



    private void Form1_FormClosing()
    {
        const string message =
            "There's an updated version of this program available. Would you like to download now?";
        const string caption = "Please update";
        var result = MessageBox.Show(message, caption,
                                     MessageBoxButtons.YesNo,
                                     MessageBoxIcon.Question);

        // If the no button was pressed ...
        if (result == DialogResult.No)
        {
            MessageBox.Show("Program will close now. If you want to use this program please update to the newest version.", "Please update");
            this.Close();
        }
        else if (result == DialogResult.Yes)
        {
            System.Diagnostics.Process.Start("http://www.google.com");
            this.Close();
        }
    }

}
}

6 个答案:

答案 0 :(得分:4)

请勿在{{1​​}}内致电Form1_FormClosing();。不确定您是否需要,但Form1_LoadNo都会关闭表单。我怀疑你有表格的Form1_Load Yes Load`事件。

[编辑]

您评论显示的消息框会发生,因为它正在表单的“加载”中显示。表单没有进行自我渲染的更改。

答案 1 :(得分:0)

您在此处所做的是向用户显示一条消息,告诉他/她该应用程序的新版本可用。

现在,他/她有什么选择?

如果答案为否:您关闭应用
如果答案是肯定的:您也将其关闭

这正是你在这里所做的。

请让您的问题更清晰,以便我们为您提供帮助。

答案 2 :(得分:0)

尝试将来电MessageBox.Show(message, caption, ...更改为MessageBox.Show(this, message, caption, ... - 这会使消息框模态化为表单。要检查的另一件事是如何显示表单 - 您使用VS生成的默认Main方法还是对其进行了任何更改?

答案 3 :(得分:0)

如果您想在Form_Load()中结束申请。使用表单的FormClosing()事件,然后调用this.Close();

示例:

private void Form1_Load(object sender, EventArgs e)
{
   this.Close();  //this will call Form_Closing()

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

    //do stuff
    if (result == DialogResult.No)
    {
          e.Cancel = true;        // if you don't want to close your form 
    }
    else
    {
        // do stuff on closing form
    }

}

答案 4 :(得分:0)

你可以试试这种东西

DialogResult result = MessageBox.Show(message, caption,
                                         MessageBoxButtons.YesNo,
                                         MessageBoxIcon.Question, 
                                         MessageBoxDefaultButton.Button1, 
                                         MessageBoxOptions.DefaultDesktopOnly); 

答案 5 :(得分:0)

究竟是什么问题???您的意思是说您无法查看消息框本身或仅查看其中的内容吗?

如果未显示消息框本身,则表示未正确调用Form1_Load事件。尝试删除该事件并通过右键单击表单再次创建它 - >属性。在事件选项卡中,单击“加载”,然后在“加载”事件内再次调用Form1_FormClosing方法。

尝试在我的系统中执行,表单按预期工作。