您现在的位置: 365建站网 > 365学习 > C#中DialogResult的属性和用法

C#中DialogResult的属性和用法

文章来源:365jz.com     点击数:319    更新时间:2018-06-07 11:08   参与评论

Window.DialogResult 属性

.NET Framework (current version)其他版本 

获取或设置对话框结果值,即从返回的值 ShowDialog 方法。


属性值

Type: System.Nullable<Boolean>

一个 Nullable<T> 类型的值 Boolean。 默认值为 false。

异常

ExceptionCondition
InvalidOperationException

DialogResult 在通过调用打开一个窗口前设置 ShowDialog。

- 或 -

DialogResult 通过调用打开的窗口上设置 Show。

备注

DialogResult 可以使用的代码中显示一个对话框,以确定用户是否接受 (true) 或已取消 (false) 对话框。 如果已接受对话框中,这表示打开对话框中检索数据收集的用户,并对其进行处理的代码。 如果对话框已被取消,但是,这表示调用的代码应停止任何进一步的处理。

在所有这些情况下, DialogResult 是 false 默认情况下。

对话框通常提供一个用于取消对话框中,即按钮的特殊按钮其 IsCancel 属性设置为 true。 或者它按下时,或按 ESC 键时,这种方式配置一个按钮将自动关闭窗口。 在这些情况下,任一 DialogResult 保持 false。

对话框中通常还提供一个接受按钮,这是其 IsDefault 属性设置为 true。 这种方式配置一个按钮将引发其 Click 时它或 ENTER 键被按下事件。 但是,它不会自动关闭该对话框中,也不会将设置 DialogResult 到 true。 您需要手动编写此代码中,通常从 Click 默认按钮的事件处理程序。

DialogResult 是 null 时显示对话框但不接受或已取消。

XMLns="http://www.w3.org/1999/xHTML">在对话框关闭后,你可以从返回的值获取的对话框结果 ShowDialog 方法,或通过检查 DialogResult 属性。

DialogResult 仅时可以设置 Window 打开通过调用其 ShowDialog 方法。


     在程序中,经常会弹出一个对话框来让用户填写一些信息,填写完成后,当用户点击“确定”按钮后,在主窗体中进行其他的处理。比如一个简单的例子,在主窗体中有一个菜单,是“增加用户”,当点击这个菜单之后,我们需要弹出一个增加用户的窗体出来,就假设“增加用户”的窗体叫frmAddUser,那么代码如下:

    frmAddUser frm = new frmAddUser();
    if (frm.ShowDialog() == DialogResult.OK)
    {
        //todo list
    }

一般都是设置“增加用户”窗体中“确定”按钮的DialogResult的属性,

clip_image002

      设置完成后,只要用户一点击“确定”按钮,那么对话框就关闭,重新回到主窗体,然后可以在主窗体中进行相应的处理,比如把数据写入数据库等。

      现在有一个问题就是,“增加用户”的窗体如下:

clip_image004

      如果我想判断一下,用户输入的邮件格式是否正确,那么我该把这段代码放在哪呢?如果放在邮件输入框那个TextBox的TextChaged事件中,那么用户输入一个字母都会激发那个事件,这样就不太好,如果放在“确定”按钮的事件中,那么如果用户的邮件格式输入的不正确,就不应该返回主窗体,而是继续留在这个窗体上,等待用户修改,可是事实却不是这样,因为你设置了“确定”按钮的Dialogue属性,只要用户一点击按钮,主窗体中的

   if (frm.ShowDialog() == DialogResult.OK)

这个判断就为真,不管你的邮件格式是否正确,主窗体都会继续向下执行。

      最后,终于找到了一个比较好的解决办法,都以为只有Button才有Diagolue属性,没想到窗体也有这个属性。所以我们根本就不需要设置“确定”按钮的Diagolue属性,直接把判断邮件是否合格的方法放在”确定”按钮的点击事件中,如果符合,那么就设置窗体的Diagolue属性为OK,用下面的代码:

   this.DialogResult = DialogResult.OK;

这样主窗体中的if (frm.ShowDialog() == DialogResult.OK)这个判断也为真,它会继续执行下面的代码。如果不符合格式,就啥也不做,因为没有设置窗体的Diagolue属性为OK,所以“增加用户”的对话框永远不会关闭,主窗体也会一直等待,而不会去执行其他的代码。

     例子比较简单,只是我原来不知道这些,所以在这里记录一下。当然这只是一种办法,你也可以用其他的方法来解决类似这样的问题。


完整代码实例:

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 _2014050904DialogResult
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string message = "You did not enter a server name. Cancel this operation?";
        public string caption = "No Server Name Specified";
        public MessageBoxButtons buttons = MessageBoxButtons.YesNo;
        public DialogResult result;
        public void show()
        {
            //显示MessageBox.
            result = MessageBox.Show(this, message, caption, buttons);
            //如果点击的是"YES"按钮,将form关闭.
            if (result == DialogResult.Yes)
            {
                // Closes the parent form.
                this.Close();
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            show();
        }
    }
}


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (319人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------