您的位置:首页 > 编程语言 > C#

C#利用委托实现窗体间的值传递 .

2013-12-04 16:56 495 查看
A、网上有很多方法,大家可搜一下,都可用。

B、这里只是说明下是只利用委托,学习基本的委托运用。

方法如下:

1、C#建立一个默认工程,默认窗体Form1

2、加入一个新窗体,默认Form2

3、Form1窗体上放一个Label,一个Button,属性分别为:

this.label1.Text = ""; // 清空label的值

this.button1.Text="otherForm"; //设置button显示为otherForm

[c-sharp]
view plaincopyprint?

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.label1.Text = "";
this.button1.Text = "otherForm";
}

[c-sharp]
view plaincopyprint?

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.textBox1.Text = "";
this.button1.Text = "input";
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.textBox1.Text = "";
this.button1.Text = "input";
}


5、上面的步骤就建立了两个基本的窗体,接下来回到Form1的代码设计视图
拷贝下面代码

[c-sharp]
view plaincopyprint?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.label1.Text = "";
this.button1.Text = "otherForm";
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
returnValueEvent += new returnValue(Form1_returnValueEvent);
frm2.Show();
}

void Form1_returnValueEvent(string str)
{
// throw new NotImplementedException();

this.label1.Text = str;
}

// 定义委托
public delegate void returnValue(string str);
// 委托的事件
public static event returnValue returnValueEvent;
// 委托的事件的函数
public void doReturnValue(string str)
{
returnValueEvent(str);
}
}
}

[c-sharp]
view plaincopyprint?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.textBox1.Text = "";
this.button1.Text = "input";
}

private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.doReturnValue(this.textBox1.Text);
}
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.textBox1.Text = "";
this.button1.Text = "input";
}

private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.doReturnValue(this.textBox1.Text);
}
}
}


7、运行后,就可以在两个窗体间传递参数了

注:重点是第六步中的,对委托的定义和调用

returnValueEvent += new returnValue(Form1_returnValueEvent);


void Form1_returnValueEvent(string str)

{

// throw new NotImplementedException();

this.label1.Text = str;

}

// 定义委托

public delegate void returnValue(string str);

// 委托的事件

public static event returnValue returnValueEvent;

// 委托的事件的函数

public void doReturnValue(string str)

{

returnValueEvent(str);

}

在Form2中的调用,在按钮的click事件中

Form1 frm1 = new Form1();

frm1.doReturnValue(this.textBox1.Text);


运行效果图如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: