
为了让用户与应用程序交互,用户必须能看到窗体。利用Show和ShowDialog方法就可以实现这一点。Show方法仅使窗体对用户可见。这是很简单的。但它的一个缺点是没有给调用代码发送任何通知,说明调用的窗体已处理完,并退出。有时这不重要,Show方法工作的很好。如果需要提供某种通知,使用ShowDialog方法是一种比较好的选择。
在调用Show方法后,Show方法后面的代码会立即执行。在调用ShowDialog方法后,调用代码被暂停执行,等到调用ShowDialog方法的窗体关闭后再继续执行。不仅调用代码被暂停执行,而且窗体也可以返回一个DialogResult值。dialogresult.okDialogResult枚举是一组标识符,它们描述了对话框关闭的原因,包括OK,Cancel,Yes,No和其他几个标识符。为了让窗体返回一个DialogResult值,必须设置窗体的DialogResult属性,或者在窗体的一个按钮上设置DialogResult属性。
例如,假定应用程序的一部分要求提供客户的电话号码。窗体包含一个输入电话号码的文本框,和两个按钮OK和Cancel。如果把OK按钮的DialogResult属性设置为DialogResult.OK,把Cancel按钮的DialogResult属性设置为DialogResult.Cancel,则在选择其中一个按钮时,窗体就会不可见,并给调用它的窗体返回相应的DialogResult值。现在注意窗体没有释放,只是把Visible属性设置为false。这是因为仍必须从窗体中获取值。在这个示例中,我们需要电话号码。在窗体上为电话号码创建一个属性,这样父窗体就可以获取值,并调用窗体上的Close方法了。下面是子窗体的代码:
[code=csharp]namespace ChildForm
{
public partial class Phone : Form
{
public Phone()
{
InitializeComponent();
btnOK.DialogResult = DialogResult.OK;
btnCancel.DialogResult = DialogResult.Cancel;
}
public string PhoneNumber
{
get
{
return txtPhone.Text;
}
set
{

txtPhone.Text = value;
}
}
}
}[/code]
首先要注意,不包含处理按钮的单击事件的代码。因为设置了每个按钮的DialogResult属性,所以在单击OK和Cancel按钮后,窗体就消失了。添加的唯一属性时PhoneNumber。下面的代码显示了父窗体中调用Phone对话框的方法:
[code=csharp]Phone frm = new Phone();
frm.ShowDialog();
if (frm.DialogResult == DialogResult.OK)
{
label1.Text = "Phone number is " + frm.PhoneNumber;
}
else if (frm.DialogResult == DialogResult.Cancel)
{
label1.Text = "Form was canceled.";
}
frm.Close();[/code]
这看起来非常简单。创建新的Phone对象frm,在调用frm.ShowDialog()方法时,这个方法中的代码会停止执行,等待Phone窗体返回。接着检查Phone窗体的DialogResult属性。dialogresult.ok由于窗体还未释放,是不可见的,所以仍可以访问公共属性,其中一个公共属性就是PhoneNumber.一旦获取了需要的数据,就可以调用窗体的Close方法。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32085-1.html
我们会做一个合格的对手
那苏联人死两千万人