关闭消息框,不做任何操作

时间:2014-06-20 09:01:14

标签: c# .net

我有这个示例代码来显示警告MessageBox

   if (cmprLanguage != 0 || cmprmaxCase != 0 )
    {
        DialogResult result = MessageBox.Show("Alert message", "Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
        if (result == DialogResult.OK)
        {
            loginscreen obj = new loginscreen();
            this.Close();
            obj.Show();
        }
        else
        {
            settings obj = settings(); //this re-load this form i need to show this form without reload
            obj.show(); 
            }

        }
        else
        {
            loginscreen obj = new loginscreen();
            this.Close();
            obj.Show();
        }

如果用户单击取消按钮,我需要关闭MessageBox,如果他们单击确定,我需要执行OK块内给出的过程。现在发生的情况是,如果我单击取消按钮,应用程序将重定向到主屏幕。

更新

我已经在窗体屏幕上为关闭图标写了一个关闭的事件。以前当我点击关闭图标时它直接将我带到登录屏幕,因为登录屏幕在这个窗体屏幕后面。有时用户可能输入数据而没有保存,如果他点击关闭图标我已经提出一个消息框来提醒用户。但是现在,如果我点击取消它再次带我登录屏幕,如果我点击确定它执行条件内的任务。如果我点击取消我需要显示当前屏幕与执行的操作(无需重新加载页面)

是否可以这样做?

2 个答案:

答案 0 :(得分:0)

您的代码已按预期工作。但是为了清除,您可以将MessageBox.Show()的结果放在变量中。这使得在更多代码中更容易维护和处理。像这样:

DialogResult result = MessageBox.Show("Settings not saved", "Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

然后在代码中处理它:

if(result == DialogResult.OK)
{
    //Show new data
}
else if (result == DialogResult.Cancel)
{
    //Show current data
}

<强>更新

您的代码不正确,因为您已经提供给我们:您可以在彼此之后另外发表两个声明。

为什么不离开else部分。仅在用户单击“确定”时执行操作。当用户单击“确定”时,这意味着他将保留当前表单而不保存挂起的更改。当他选择取消时,这意味着他想留在那个时刻的任何地方:

DialogResult result = MessageBox.Show("Settings not saved", "Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

if (result == DialogResult.OK)
{
    //User leaves without saving pending changes
    loginscreen ob = new loginscreen();
    this.Close();
    ob.Show();
}
//No else: just stay wherever you are.

答案 1 :(得分:0)

DialogResult result = MessageBox.Show("Settings not saved", "Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
if (result == DialogResult.OK)
{
      loginscreen ob = new loginscreen();
      this.Close();
      ob.Show();
}

在我看来,这实际上满足了你的需求。这是你的原始代码,让我解释一下。

显示MessageBox并询问用户他/她是否想要取消或同意(OK)因为表单被关闭而丢弃数据。然后,由于您的代码已经设计好,它会创建一个新的登录屏幕并允许用户执行其他操作。

这实际上似乎就是你所需要的。您希望用户保持当前表单是单击取消按钮,这恰好是您只使用这段特定代码时会发生的情况。没有其他需要,因为没有其他事情需要发生。


如果您确实希望在else语句中执行其他代码,您可以考虑创建一个新表单并在其上放置“确定”和“取消”按钮(创建自己的“自定义MessageBox”)。如果确实需要,这将允许您更多选项。但是看看你想要实现的目标,你现在只使用if和no语句就可以了。