我们在日常WinForm开发当中,肯定会碰到两个相互传值的过程,但一般看到的介绍都比较肤浅,没有很好的介绍.
平时我们都听到用构造函数和属性来传值,有些说用委托事件来传值,敝人水平有限无法实现,但是说若用static字段传值我也没试过,现在将开发当中经常用的两种传值方式一一介绍:
首先:用构造函数来传值,此传值的作用,无可厚非,肯定是窗体在初始化的时候把值赋给另一个窗体控件中的属性,我现在在父类窗体放置一个TextBox1和Button1控件,Button1击发单击事件Button1_Click
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
private void button1_Click(object sender, EventArgs e)
{
string s=textBox1.Text.Trim();
Child frmChild=new Child (s);
frmChild.ShowDialog();
if (frmChild.DialogResult == DialogResult.OK)
{
textBox1.Text = frmChild.ReturnValue;
}
}
就以上面的代码来分析,这是父窗体,我们给子类窗体传递了s值,同时以模式窗体显示,关于模式窗体与非模式窗体我想需要介绍一下,模式窗体就是激发了,父窗体暂时不能操,非模式恰好相反,这样模式窗体就可以返回值,当模式窗体的DialogResult结果对DialogResult值时,我们可以在这里取得模式窗体属性,至于我们为什么要自定义属性,这应该是面象对向封装的问题.
下面我就贴子类窗体Child.CS代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
public partial class Child : Form
{
public Child(string s)
{
InitializeComponent();
textBox1.Text = s;
}
/// <summary>
/// 自定义属于用于返回值
/// </summary>
public string ReturnValue
{
get
{
return textBox1.Text.Trim();
}
}
private void textBox1_DoubleClick(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
}
![](https://images.cnblogs.com/cnblogs_com/izxp/child.jpg)
看到没有,我们自定义了一个属性值ReturnValue,使用了get方法,当然我只在窗体上放置了textBox1一个控件,所以激发了
textBox1_DoubleClick事件,将此窗体的DialogResult设置为OK,默认也是这值,然后将此关闭,不过关才并非真的关闭,在.net中有垃圾回收机制来回收,只有当回收机制枚举它一段时间不用再调用终结器,然后调用析构函数.
现在看清楚没有,他们传值方法不一样,用途也不一样,构造函数是用来传递新值给另一窗体,模式窗体是为了返回值.简单的例子其实涉及东西也多,实例构造涵数,属性的作用,模式窗体.
看客看完了WinForm传递是不是意犹味尽,那继续吧两WebForm
我们上51job.com网上的时候是否选择地区的时候会弹出一个漂亮的窗体然后单击就选上了,这就是他们使用了模态窗口,这里改名字了,不叫模式,我也不知道原因,首选来段父类页面代码,利于说话
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>模态窗体父窗体</title>
<script type="text/javascript">
function b_click()
{
var obj=new Object(); //构造一个对象
var btnvalue= window.showModalDialog("child.htm",obj);
document.getElementById("Button1").value=btnvalue;
}
</script>
</head>
<body>
<input id="Button1" type="button" value="区域选择" onclick="b_click()" />
</body>
</html>
简单的一个按纽,激发click事件,构造一个对象,显示模态窗体,得到返回值
下面贴一张子网页代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>模态窗体子窗体</title>
<script type="text/javascript">
function returnvalue(id)
{
if(id==0)
{
var returnvalue=document.getElementById("li1").innerHTML;
window.returnValue=returnvalue;
window.close();
}
if(id==1)
{
var returnvalue=document.getElementById("li2").innerHTML;
window.returnValue=returnvalue;
window.close();
}
if(id==2)
{
var returnvalue=document.getElementById("li3").innerHTML;
window.returnValue=returnvalue;
window.close();
}
if(id==3)
{
var returnvalue=document.getElementById("li4").innerHTML;
window.returnValue=returnvalue;
window.close();
}
}
</script>
</head>
<body>
<ul>
<li id="li1" onclick="returnvalue(0)">北京</li>
<li id="li2" onclick="returnvalue(1)">广东</li>
<li id="li3" onclick="returnvalue(2)">杭州</li>
<li id="li4" onclick="returnvalue(3)">江西</li>
</ul>
</body>
</html>
![](https://images.cnblogs.com/cnblogs_com/izxp/w1.jpg)
根据不图的id得到不同的值
其他的我就不多说了,代码我上传上去
/Files/izxp/WinForm_01.rar/Files/izxp/WinForm_01.rar