
C#模式窗体的打开与关闭是如何实现的呢,让我们先来看看C#模式窗体的打开,一般通过Form.ShowDialog ()方法或她的一个重载Form.ShowDialog (IWin32Window)来实现,其中后一个方法将窗体显示为具有指定所有者的模式对话框。dialogresult.ok
C#模式窗体打开的操作:
- OptionForm form = new OptionForm();
- //form.ShowDialog();
- form.ShowDialog(this);
对于指定所有者方式打开的模式窗体可以在模式窗体内部获取主窗体的引用,
- //在模式窗体内部访问所属窗体
- MainForm form = this.Owner as MainForm;
注意,如果以Form.ShowDialog ()方式打开,那Form.Owner属性会是空引用。
C#模式窗体的关闭
先来看一下模式窗体关闭后的返回值。无论是调用Form.ShowDialog ()方法还是Form.ShowDialog (IWin32Window)方法,都会在模式窗体关闭时返回System.Windows.Forms.DialogResult枚举值。参考 MSDN,该枚举包含的值如下,
DialogResult.Abort,对话框的返回值是 Abort(通常从标签为“中止”的按钮发送)。
DialogResult.Cancel,对话框的返回值是 Cancel(通常从标签为“取消”的按钮发送)。
DialogResult.Ignore,对话框的返回值是 Ignore(通常从标签为“忽略”的按钮发送)。
DialogResult.No,对话框的返回值是 No(通常从标签为“否”的按钮发送)。
DialogResult.None,从对话框返回了 Nothing。这表明有模式对话框继续运行。
DialogResult.OK,对话框的返回值是 OK(通常从标签为“确定”的按钮发送)。

DialogResult.Retry,对话框的返回值是 Retry(通常从标签为“重试”的按钮发送)。
DialogResult.Yes,对话框的返回值是 Yes(通常从标签为“是”的按钮发送)。
由于某些原因在实际用户操作中比如选项数据无法保存,输入的设置数据有问题,点击[确定]按钮需要阻止窗体的关闭以
对输入的设置进行调整。对于一些开发者在技术社区贴的阻止模式窗体关闭的代码,我认为不是很好的实现。以下用代码来描述该实现,注意其中用到了三个事件。
- //注册窗体关闭事件
- this.FormClosing +=
- new System.Windows.Forms.
- FormClosingEventHandler(
- this.OptionForm_FormClosing);
- //注册确定按钮事件
- this.buttonOK.Click +=
- new System.EventHandler(
- this.buttonOK_Click);
- //注册取消按钮事件
- this.buttonCancel.Click +=
- new System.EventHandler(
- this.buttonCancel_Click);
- //三个事件对应的事件处理程序如下,
- //确定按钮处理程序
- private void buttonOK_Click(
- object sender, EventArgs e)
- {
- //假设textBoxPath用来记录目录路径,如果不存在要求用户重新设置。
- if (this.textBoxPath.Text.Trim().Length == 0)
- {
- MessageBox.Show("输入路径信息不对!");
- this.textBoxPath.Focus();
- }
- else
- {
- this.DialogResult = DialogResult.OK;
- }
- }
- //取消按钮处理程序
- private void buttonCancel_Click(
- object sender, EventArgs e)
- {
- this.DialogResult = DialogResult.Cancel;
- }
- //窗体关闭处理程序,在关闭窗体时发生。
- private void OptionForm_FormClosing(
- object sender, FormClosingEventArgs e)
- {
- if (this.DialogResult != DialogResult.Cancel &&
- this.DialogResult != DialogResult.OK)
- e.Cancel = true;
- }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32087-1.html
仅凭“可能有”就随便入侵一个国家
美国为了霸占巴拿马运河