A.WinForm中窗体显示 
显示窗体可以有以下2种方法: 
Form.ShowDialog方法 (窗体显示为模式窗体) 
Form.Show方法 (窗体显示为无模式窗体)

2者具体区别如下: 
1.在调用Form.Show方法后,Show方法后面的代码会立即执行 
2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 
3.当窗体显示为模式窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel 
与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,不调用窗体的Close方法 
实际上是把窗体的Visible属性赋值为false,隐藏窗体了 
这样隐藏的窗体是可以重新显示,而不用创建该对话框的新实例 
因为未关闭窗体,所以在应用程序不再需要该窗体时,请调用该窗体的Dispose方法

怎么判断一个窗体是模式窗体呢? 
利用Form.Modal属性,如果该窗体是模式显示,则为true,否则为false 
根据通过Show和ShowDialog而显示出来的窗体的Modal属性分别对应false和true 
特别注意: 
由于在窗体创建之前是无法得知显示方式的,所以在窗体构造函数中,Modal属性总是对应false,所以我们只能在Load事件中或者之后利用Modal属性值

怎么确定窗体间的所有者关系? 
Form类的Owner属性:窗体的所有者 
当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。 
例如,如果Form2归窗体Form1所有,则关闭或最小化Form1时,Form2也会关闭或最小化。

例如在窗体Form1中 
Form2 f2 = new Form2 ( ); 
f2.ShowDialog ( this ); 
//或者 
f2.Show ( this ); 
//或者 
f2.Owner = this; 
f2.ShowDialog( );

这样f2的所有者就是Form1

B.WinForm窗体传值 
了解了窗体的显示相关知识,接着总结一下窗体的传值方法:

1.通过构造函数 
特点:传值是单向的(不可以互相传值),实现简单 
实现代码如下: 
在窗体Form2中 
int value1; 
string value2;

public Form2 ( int value1 , string value2 ) 

InitializeComponent ( );

this.value1 = value1; 
this.value2 = value2; 
}

在窗体Form1中这样调用 
new Form2 ( 111 , "222" ).Show ( ); //这样就把111,"222",这2个值传送给了Form2

2.通过静态变量 
特点:传值是双向的,实现简单 
实现代码如下: 
在一个app类中定义一个静态成员value 
public class app 

public static string value; 
}

在窗体Form1中这样调用 
app.value = "f2"; //给静态成员赋值 
new Form2 ( ).Show ( ); //显示Form2

在窗体Form2中 
this.Text = app.value; //取回app.value的值 
app.value = "Form2"; //给app.value赋值,以便其他窗体调用

3.通过窗体的公有属性值 
特点:实现简单 
实现代码如下:

在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值 
public string Form2Value 

get 

return this.textBox1.Text; 

set 

this.textBox1.Text = value; 

}

在窗体Form1中这样调用 
Form2 f2 = new Form2 ( ); 
f2.Form2Value = "Ok"; //给Form2的textBox1赋值Ok 
f2.ShowDialog ( );

4.通过窗体的公有属性值和Owner属性 
特点:实现简单,灵活 
实现代码如下: 
在窗体Form1中 
public int Form1Value = 1;

Form2 f2 = new Form2 ( ); 
f2.ShowDialog ( this ); //把Form1作为Form2的所有者传递给Form2

在窗体Form2中 
//Form2的所有者是Form1 
Form1 f1 = ( Form1 ) this.Owner; 
//取到Form1的值是1 
MessageBox.Show ( f1.Form1Value .ToString ( ) ); 
//给Form1的Form1Value赋值222 
f1.Form1Value = 222;

5.通过窗体的公有属性值和Application.OpenForms属性 
说明:Application.OpenForms属性:获取属于应用程序的打开窗体的集合。(此属性在 .NET Framework2.0版中) 
实现代码如下: 
在窗体Form1中 
public int Form1Value = 1;

Form2 f2 = new Form2 ( ); 
f2.Show ( );

在窗体Form2中 
string formName = "Form1"; 
Form fr = Application.OpenForms [ formName ];

if ( fr != null ) 

Form1 f1 = ( Form1 ) fr; 
//取到Form1的值是1 
MessageBox.Show ( f1.Form1Value.ToString ( ) ); 
//给Form1的Form1Value赋值222 
f1.Form1Value = 222; 
}

6.通过事件 
实现代码如下: 
在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值 
并且还定义一个accept事件 
public string Form2Value 

get 

return this.textBox1.Text; 

set 

this.textBox1.Text = value; 

}

public event EventHandler accept;

private void button1_Click ( object sender , EventArgs e ) 

if ( accept != null ) 

accept ( this , EventArgs.Empty ); //当窗体触发事件,传递自身引用 

}

在窗体Form1中 
Form2 f2 = new Form2 ( ); 
f2.accept += new EventHandler ( f2_accept ); 
f2.Show ( );

void f2_accept ( object sender , EventArgs e ) 

//事件的接收者通过一个简单的类型转换得到Form2的引用 
Form2 f2 = (Form2) sender; 
//接收到Form2的textBox1.Text 
this.textBox1.Text = f2.Form2Value; 
}

show()与showDialog()的区别相关推荐

  1. Windows窗体Winform----show()与showDialog()的区别

    show()与showDialog()的区别 最常见的显示一个新的窗体的方法有两种,下面直接上代码!! A.WinForm中窗体显示 显示窗体可以有以下2种方法:   Form.ShowDialog( ...

  2. Show()跟ShowDialog()的区别

    Show和ShowDialog有什么不同呢,什么时候用Show,什么时候用ShowDialog呢?相信看完这篇博客,你会有一个比较明确的答案. 说到show跟ShowDialog的区别很多人会想到的是 ...

  3. c# winform show和showdialog的区别

    winform中show和showdialog的区别 在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show) 模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他 ...

  4. C# 非模式窗体show()和模式窗体showdialog()的区别

    对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击"确定"或 ...

  5. c#中Show和Showdialog的区别分析

    简单地说他们的区别就是show弹出来的窗体和父窗体(上一个窗体的简称)是属于同一等级的,这两个窗体可以同时存在而且可以随意切换,但是showdialog弹出来的窗体就不能这样,他永远是被置顶的,如果不 ...

  6. c#中的Form.Show和Form.ShowDialog的区别

    出处:http://hi.baidu.com/cysteine/blog/item/01e32224702ff5398744f9bf.html 区别1:ShowDialog是模态的(独占用户输入),S ...

  7. C# 窗体位置 Show和ShowDialog (转载)

    CenterParent                     窗体在其父窗体中居中.        CenterScreen                    窗体在当前显示窗口中居中,其尺寸 ...

  8. C# WinForm中Show与ShowDialog

    show()与showDialog()的区别 2010-06-05 14:22:51|  分类: c#学习|举报|字号 订阅 A.WinForm中窗体显示   显示窗体可以有以下2种方法:   For ...

  9. .Net Winform 开发笔记(四) 透过现象看本质

    写在前面: 从一个窗体的创建显示,再到与用户的交互,最后窗体关闭,这中间经历过了一系列复杂的过程,本文将从Winform应用程序中的Program.cs文件的第一行代码开始,逐步分析一个Winform ...

最新文章

  1. 简单的实现IOCP服务器模型
  2. Android开发--BroadcastReceiver介绍1
  3. configure project qt,如何为Qt Framework配置CLion IDE?
  4. Linux7/Redhat7/Centos7 安装Oracle 12C_配置IP、系统参数_02
  5. linux设备驱动之USB主机控制器驱动分析 【转】
  6. SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
  7. FPGA复位激励编写(方法二)
  8. 记 笔记软件极力推荐------------->思源
  9. 利用爬虫获取网上医院药品价格信息 (上)
  10. 手机模拟门禁卡 — 手机软件教程
  11. at指令 meid_【技术分享】使用AT调制解调器命令解锁LG Android屏幕
  12. 电网数字化转型经验分享
  13. CnOpenData中国小区及二手房交易数据简介
  14. 【C++】由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题。(解决办法)
  15. Windows 8.1下释放磁盘空间的指南
  16. 杰里之BQB认证出现的一些问题分析篇
  17. NAT-T下的端口浮动
  18. 一句话解释IPD的核心内容
  19. Python实现将图片批量转化成素描图
  20. labelmelabelImg项目

热门文章

  1. 什么是HADOOP以及HADOOP生态圈以及各组成部分的简介
  2. zte android phone驱动,驱动天空 - 手机驱动 - 中兴手机 ZTE
  3. OPPO FindN无法安装Charles证书
  4. 打包python程序,得到自己的egg
  5. 四川星利恒:拼多多想退运费要怎么做
  6. dnspod的url转发
  7. 天气APP的实战(1)
  8. 层次聚类-Hierarchical Clustering
  9. 毒霸网址大全的彻底删除
  10. android支持千兆网络,千兆级 LTE 为你带来快得超乎想象的网速