WinForm中窗体中的页面传值
2010-11-24 12:41
197 查看
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;
}
中
窗体显示
显示窗体可以有以下
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;
}
相关文章推荐
- WinForm中窗体中的页面传值
- C# WinForm窗体间传值
- WinForm开发,窗体显示和窗体传值相关知识总结
- winform窗体间传值
- WinForm中窗体间传值(中间类)
- 【转】WinForm开发,窗体显示和窗体传值相关知识总结
- (C#)WinForm窗体间传值
- [导入]Winform间窗体传值
- Winform 窗体传值
- C# WinForm(窗体) 之间传值
- Winform窗体间传值
- WinForm窗体间传值大全
- winform 两个窗体之间来回传值/相互传值
- winform窗体间传值
- WinForm开发,窗体显示和窗体传值相关知识总结
- winform窗体间传值的问题
- 窗体之间传值(winform)-----源码
- WinForm窗体间传值
- WinForm开发,窗体显示和窗体传值相关知识总结(转)
- WinForm中的窗体间传值(委托在窗体应用程序的运用)