showdialog
在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show)。
区别:
模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体。模态窗体不允许操作其他窗体,非模态窗体可以操作其他窗体。
模态显示后, 弹出窗口阻止调用窗口的所有消息响应。 只有在弹出窗口结束后调用窗口才能继续。 在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。
在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码
窗体显示为模式窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel 与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,不调用窗体的Close方法 实际上是把窗体的Visible属性赋值为false,隐藏窗体了 这样隐藏的窗体是可以重新显示,而不用创建该对话框的新实例 因为未关闭窗体,所以在应用程序不再需要该窗体时,请调用该窗体的Dispose方法
所以模态窗口在关闭时,不会调用close方法,也不调用dispose方法,窗口仍然存在,占有资源,所以可以继续获得窗口相关信息,在窗口不再使用时,需要手动释
testDialog.ShowDialog(); // 模态窗口关闭后,可以再次显示出来
testDialog.Dispose(); // 当模态窗口不再使用时,应该调用dispose方法释放资源
非模态显示后, 可以在弹出窗口和调用窗口之间随意切换。 调用窗口调用show方法后,下面的代码可以立即执行。 在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,无法获取窗口的任何信息。
怎么判断一个窗体是模式窗体呢? 利用Form.Modal属性,如果该窗体是模式显示,则为true,否则为false 根据通过Show和ShowDialog而显示出来的窗体的Modal属性分别对应false和true 特别注意: 由于在窗体创建之前是无法得知显示方式的,所以在窗体构造函数中,Modal属性总是对应false,所以我们只能在Load事件中或者之后利用Modal属性值
怎么确定窗体间的所有者关系? Form类的Owner属性:窗体的所有者 当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。 例如,如果Form2归窗体Form1所有,则关闭或最小化Form1时,Form2也会关闭或最小化。

private void button1_Click(object sender, EventArgs e)
{
Form2 mainForm = new Form2();
mainForm.StartPosition = FormStartPosition.CenterScreen;
mainForm.Location = new Point(500,500);
//mainForm.ShowDialog(this);
//或者 如果设置子府窗体,可以根据具体需求设置调用的方式
mainForm.Show(this);
//或者
//mainForm.Owner = this;
//mainForm.ShowDialog();
}

Winform 窗体传值
1.调用构造函数,传值是单向的传递,实现简单,重写构造函数,在其中赋值即可;
2.静态变量,在一个类中定义一个静态变量,其实相当于定义一个全局变量;
3.给窗体定义公有属性,在调用时给予赋值;
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;
原文网址:http://blog.csdn.net/percy__lee/article/details/48554339
showdialog的更多相关文章
- 【转】WPF: 自动设置Owner的ShowDialog 适用于MVVM
原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialog方法并没有提供设置Owner的参数,开发者需要在ShowDialog前设 ...
- 传智播客--高级控件--showdialog关闭(小白内容)
以往我在WPF里,用ShowDialog展示出一个页面,一般都是用Close()进行关闭. 今天看传智播客的视频时,了解到还能直接给DialogResult一个TRUE或者false的属性,使页面关闭 ...
- Application.Run()和Form.Show()以及Form.ShowDialog()
ShowDialog()弹出模式化的窗体 Show()弹出非模式化的窗体 模式窗体,在关闭或隐藏前无法切换到主窗体. 非模式窗体,变换焦点使不必关闭窗体 总结:显示重要的信息,还是用模式窗体,如删除文 ...
- C#-WinForm-打开其他窗体的三种方式-Show()、设置Owner()、ShowDialog()
打开其他窗体的三种方式 Show - 例如登入界面进入主页面,直接将主页面展示出来,两个窗体互不影响 public partial class Form1 : Form { public Form1( ...
- Waiting Processed Cancelable ShowDialog (Release 2)
namespace Test { using System; using System.Windows.Forms; static class Program { /// <summary> ...
- Waiting Processed Cancelable ShowDialog
namespace ConsoleApplication { using System; using System.Threading; using Microshaoft; /// <summ ...
- C# 窗体位置 Show和ShowDialog(转)
CenterParent 窗体在其父窗体中居中. CenterScreen 窗体在当前显示窗口中居中,其尺寸在窗体大小中指定. Manual 窗体的位置由 Location 属性确定. Windows ...
- C# 非模式窗体show()和模式窗体showdialog()的区别(转)
对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击“确定”或“取消”,则它就是模 ...
- 父窗口的treeview在调用其他窗体的ShowDialog后闪烁问题
ShowDialog(this)改为ShowDialog()即可! 具体原理未深究
- WPF用ShowDialog()弹出窗体时控制该窗体的显示位置,并传值回父窗体
原文:http://blog.csdn.net/kiss0622/article/details/5852153 方法一: 1.父窗口代码 Window1.xaml.cs private void B ...
随机推荐
- python自动发邮件库yagmail(转)
一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from email ...
- static关键字的定义与使用
static关键字概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了. 1 ...
- ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键
LittlevGL 添加自定义字体获取字库 ttf 文件可以从一些网站上获取字库文件,比如请注意字体许可证 生成源文件使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件 ...
- 【转载】CentOS 安装rz和sz命令 lrzsz
lrzsz在linux里可代替ftp上传和下载.lrzsz 官网入口:http://freecode.com/projects/lrzsz/ lrzsz是一个unix通信套件提供的X,Y,和ZMode ...
- 上传菜品数据&生成点餐二维码
基础数据上传 在门店助手打开数据上传功能,点击上传到微餐厅3.0,,即将门店本地的基础数据上传到线上. 注意1:上传前,需要在线下系统维护好基础数据 注意2:线下基础数据发生更改时,需要手动在门店助手 ...
- PAT_A1126#Eulerian Path
Source: PAT A1126 Eulerian Path (25 分) Description: In graph theory, an Eulerian path is a path in a ...
- Junit在SSH中的集成测试
测试Spring容器 在Junit的测试类中,继承AbstractJUnit4SpringContextTests就可以进行Spring容器测试, 例如下面测试用例, @RunWith(SpringJ ...
- Codeforces 899C - Dividing the numbers
传送门:http://codeforces.com/contest/899/problem/C 本题是一个数学问题——集合划分. 将集合{1,2,...,n}划分成两个集合,使得两个集合的元素之和的绝 ...
- java IO框架分析
jave.io框架 2010-11-10 22:18:34| 分类: 默认分类|举报|字号 订阅 可从IO的类层次,IO框架的设计模式来论述. 总体来说,IO可以分为字节流和字符流,不同在于 ...
- lunix下的redis数据库操作——list列表
首先,需要先了解栈和队列的概念: 栈 先进后出:类比弹夹上的子弹,最后上进弹夹的子弹第一个使用,砌墙的板砖,后来居上 队列 先进先出:排队打饭,先到先得 创建列表: 左添加:(栈的形式添加) lp ...