关于DialogResult

关于DialogResult

大家好,又见面了,我是你们的朋友全栈君。

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

代码语言:javascript复制 1: frmAddUser frm = new frmAddUser();代码语言:javascript复制 2: 代码语言:javascript复制 3: if (frm.ShowDialog() == DialogResult.OK)代码语言:javascript复制 4: 代码语言:javascript复制 5: {代码语言:javascript复制 6: 代码语言:javascript复制 7: //todo list代码语言:javascript复制 8: 代码语言:javascript复制 9: }代码语言:javascript复制 10: 一般都是设置“增加用户”窗体中“确定”按钮的DialogResult的属性,

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

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

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

代码语言:javascript复制 1: if (frm.ShowDialog() == DialogResult.OK)这个判断就为真,不管你的邮件格式是否正确,主窗体都会继续向下执行。

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

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

以上为我转的,解释的很好

————————————————————————————–

我实验的:

在form1中写button事件:

Form2 f2 = new Form2();

f2.Show();

f2.Visible = false;//没有这句的话,下面的ShowDialog()会出异常 。已经可见的窗体不能显示为模式对话框。在调用 showDialog 之前应将窗体的 Visible 属性设置为 false。

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

{

this.button1.Text = f2.Text;

}

或者:

Form2 f2 = new Form2();

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

{

this.button1.Text = f2.Text;

}

form2中 button事件:

DialogResult = DialogResult.OK;

模态对话框:Modal Dialogue Box,是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。

————————————————————————————–

windows 的showDialog 方法 http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.form.dialogresult(VS.80).aspx

窗体的对话框结果是当窗体显示为模式对话框时从该窗体返回的值,如果窗体显示为对话框,用DialogResult枚举中的值设置此属性将设置该窗体的对话框结果值、隐藏模式对话框并将控制返回给调用窗体。此属性通常由窗体上Button控件的DialogResult属性设置

当用户单击 Button 控件时,分配给 Button 的DialogResult 属性的值将分配给该窗体的 DialogResult 属性。

当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。当用户单击对话框的“关闭”按钮或设置 DialogResult 属性的值时,不会自动调用 Close 方法。而是隐藏该窗体并可重新显示该窗体,而不用创建该对话框的新实例。因为此行为,所以当应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。

可以使用此属性确定对话框是如何关闭的,以便正确处理在该对话框中执行的操作。

public

void CreateMyForm()

DialogResult

{

DialogResult // Create a new instance of the form.

DialogResult Form form1 = new Form();

DialogResult // Create two buttons to use as the accept and cancel buttons.

DialogResult Button button1 = new Button ();

DialogResult Button button2 = new Button ();

DialogResult

DialogResult // Set the text of button1 to “OK”.

DialogResult button1.Text = “OK”;

DialogResult // Set the position of the button on the form.

DialogResult button1.Location = new Point (10, 10);

DialogResult // Set the text of button2 to “Cancel”.

DialogResult button2.Text = “Cancel”;

DialogResult // Set the position of the button based on the location of button1.

DialogResult button2.Location

DialogResult = new Point (button1.Left, button1.Height + button1.Top + 10);

DialogResult // Make button1’s dialog result OK.

DialogResult button1.DialogResult = DialogResult.OK;

DialogResult // Make button2’s dialog result Cancel.

DialogResult button2.DialogResult = DialogResult.Cancel;

DialogResult // Set the caption bar text of the form.

DialogResult form1.Text = “My Dialog Box”;

DialogResult

DialogResult // Define the border style of the form to a dialog box.

DialogResult form1.FormBorderStyle = FormBorderStyle.FixedDialog;

DialogResult // Set the accept button of the form to button1.

DialogResult form1.AcceptButton = button1;

DialogResult // Set the cancel button of the form to button2.

DialogResult form1.CancelButton = button2;

DialogResult // Set the start position of the form to the center of the screen.

DialogResult form1.StartPosition = FormStartPosition.CenterScreen;

DialogResult

DialogResult // Add button1 to the form.

DialogResult form1.Controls.Add(button1);

DialogResult // Add button2 to the form.

DialogResult form1.Controls.Add(button2);

DialogResult

DialogResult // Display the form as a modal dialog box.

DialogResult form1.ShowDialog();

DialogResult

DialogResult // Determine if the OK button was clicked on the dialog box.

DialogResult if (form1.DialogResult == DialogResult.OK)

DialogResult {

DialogResult // Display a message box indicating that the OK button was clicked.

DialogResult MessageBox.Show(“The OK button on the form was clicked.”);

DialogResult // Optional: Call the Dispose method when you are finished with the dialog box.

DialogResult form1.Dispose();

DialogResult }

DialogResult else

DialogResult {

DialogResult // Display a message box indicating that the Cancel button was clicked.

DialogResult MessageBox.Show(“The Cancel button on the form was clicked.”);

DialogResult // Optional: Call the Dispose method when you are finished with the dialog box.

DialogResult form1.Dispose();

DialogResult }

DialogResult }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152161.html原文链接:https://javaforall.cn

相关推荐

油卡怎么查询金额
beat365正版网站唯一官网app

油卡怎么查询金额

📅 10-24 👁️ 6206
如何在 Android 裝置上儲存彩信照片?
365bet官方网站

如何在 Android 裝置上儲存彩信照片?

📅 10-24 👁️ 759
干货!共享充电宝海外各国家市场情况介绍
365最专业的数据服务平台

干货!共享充电宝海外各国家市场情况介绍

📅 10-13 👁️ 796
马拉松跑全程一般人跑多久 马拉松跑全程是多少米?
365最专业的数据服务平台

马拉松跑全程一般人跑多久 马拉松跑全程是多少米?

📅 10-10 👁️ 1510
顾仲安的楷书和行书字帖
365bet官方网站

顾仲安的楷书和行书字帖

📅 10-30 👁️ 5966
2018俄罗斯世界杯球场分布图详细介绍_座位分布图_球场花了多少钱
365最专业的数据服务平台

2018俄罗斯世界杯球场分布图详细介绍_座位分布图_球场花了多少钱

📅 06-27 👁️ 4737
大连网站建设明细报价表
365最专业的数据服务平台

大连网站建设明细报价表

📅 08-13 👁️ 6332
足球为什么不能彩虹过人
beat365正版网站唯一官网app

足球为什么不能彩虹过人

📅 08-29 👁️ 6966