Winform双向传值

来源:互联网 发布:js手册中文版 编辑:程序博客网 时间:2024/06/05 17:05

1:form1

    public partialclass Form1 : Form

{

//公共参数,用来传向form2

        public staticstring s;

        public Form1()

        {

            InitializeComponent();

        }    

        private void button1_Click(object sender,EventArgs e)

        {

          

 

               Form2 frm = new Form2();

            s = textBox1.Text;

            frm.ShowDialog();

          

 

//i为from2的公共参数,用来判断form2的textBox值是否修改

            if (Form2.i == 1) {

                this.textBox1.Text = Form2.s;

            }

        }

    }

2:form2

    public partialclass Form2 : Form

    {

  

//用来判断form2的值是否改变

        public staticint i=0;

//公共参数,用来传向form1

        public staticstring s;

        public Form2()

        {

            InitializeComponent();

           

        }

 

        private void initData()

        {

            this.textBox1.Text = Form1.s;

        }

        private void button1_Click(object sender,EventArgs e)

        {

 

            s = this.textBox1.Text;

            i = 1;

            this.Hide();

        }

 

/页面加载,调用方法来获取form1的值

        private void Form2_Load(object sender,EventArgs e)

        {

           initData();

        }

 

    }

}

 

 

、、、

 

了解了窗体的显示相关知识,接着总结一下窗体的传值方法: 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;  }

0 0