中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 其他
谈基于.Net平台开发中的模式窗体(2)
作者:佚名 时间:2007-09-04 15:20 出处:csdn 责编:月夜寒箫
              摘要:谈基于.Net平台开发中的模式窗体(2)

模式窗体的打开与关闭

谈到模式窗体的打开,一般通过Form.ShowDialog ()方法或她的一个重载Form.ShowDialog (IWin32Window)来实现,其中后一个方法将窗体显示为具有指定所有者的模式对话框。如下代码所示,

            

OptionForm form = new OptionForm();

//form.ShowDialog();

form.ShowDialog(this);

对于指定所有者方式打开的模式窗体可以在模式窗体内部获取主窗体的引用,

            

//在模式窗体内部访问所属窗体

MainForm form = this.Owner as MainForm;

注意,如果以Form.ShowDialog ()方式打开,那Form.Owner属性会是空引用。

谈到模式窗体的关闭,先来看一下模式窗体关闭后的返回值。无论是调用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;

}

上面的代码都正常,就是事件写多了,对上面代码进行修改,去掉[取消]按钮事件和窗体关闭事件以及相关的事件处理程序。首先需要在窗体构造函数中通过设置按钮的DialogResult属性来实现返回特定的DialogResult。

            

this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;

this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;

注册确定按钮事件,

            

//注册确定按钮事件

this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);

//确定按钮处理程序

private void buttonOK_Click(object sender, EventArgs e)

{

  if (this.textBoxPath.Text.Trim().Length == 0)

  {

      MessageBox.Show("输入的路径信息不对!");

      this.textBoxPath.Focus();

      //设置文本框焦点

      this.DialogResult = DialogResult.None;

  }

}

可见,新的实现方式代码减少了一半。 

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有