码迷,mamicode.com
首页 > Windows程序 > 详细

C#窗体间传值方法总结

时间:2015-04-10 15:32:07      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为:

 

FMChild fmChild = new FMChild();

fmChild.ShowDialog();

fmChild.Dispose();

 

 

如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:

 

private string strValueA;

public string StrValueA

{

get

{

return strValueA;

}

set

{

strValueA = value;

}

}

 

 

使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。

 

方法一:

 

FMChild fmChild = new FMChild();

fmChild.ShowDialog(this);

fmChild.Dispose();

 

 

方法二:

 

FMChild fmChild = new FMChild();

FMChild.Owner = this;

fmChild.ShowDialog();

fmChild.Dispose();

 

 

然后在修改子窗体FMChild中申明一个主窗体FMMain对象,

 

FMMain fmMain;

 

 

在需要使用主窗体FMMain的string strValueA的地方加上如下代码:

 

fmMain = (FMMain)this.Owner;

 

 

这样,就可以获得主窗体FMMain中strValueA的值了。

 

这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。

 

private string strValueB;

public string StrValueB

{

get { return strValueB; }

set { strValueB = value; }

}

 

 

那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:

 

string strTmp = fmChild.StrValueB;

 

 

注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用:

 

FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose();

 

 

在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。

 

 

 

C#窗体间传值的几种方法

调用窗体(父):Form1,被调用窗体(子):Form2

方法1: 所有权法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//在调用Form2时,要把Form2的所有者设为Form1

Form2 f2 = new Form2() ;

f2.Owner = this;

f2.ShowDialog() ;

//Form2:

//在需要对其调用者(父)刷新时

Form1 f1 ;

f1 = (Form1)this.Owner;

f1.Refresh_Method() ;

方法2:自身传递法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

Form2 f2 = new Form2() ;

f2.ShowDialog(this) ;

//Form2:

private Form1 p_f1;

public Form2(Form1 f1)

{

InitializeComponent();

p_f1 = f1;

}

//刷新时

p_f1.Refresh_Method() ;

方法3:属性法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//调用时

Form2 f2 = new Form2() ;

f2.P_F1 = this;

f2.Show() ;

 

//Form2:

private Form1 p_f1;

public Form1 P_F1

{

get{return p_f1;}

set{p_f1 = value;}

}

//刷新时

p_f1.Refresh_Method() ;

方法4:委托法

//声明一个委托

public delegate void DisplayUpdate();

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//调用时

Form2 f2 = new Form2() ;

f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;

f2.Show() ;

//Form2:

//声明事件

public event DisplayUpdate ShowUpdate;

//刷新时,放在需要执行刷新的事件里

ShowUpdate();

 

Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:

Form2 f2 = new Form2();

f2.ShowDialog(this);

 

Form2中放一个TextBox1,一个Button1,当点击Button1时执行:

 

Form1 f1 = (Form1)this.Owner;

f1.Label1.Text = this.TextBox1.Text;

 

注意:Form1中的label1要设为public

 

用C#实现两个WinForm间的传值

 

这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。

 

实现的思路:

     从Form1传递到Form2: 2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。

 

     从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。

 

实现步骤及代码:

 

      1:新建两个窗口: Form1,Form2;

      2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数:

        //定义一个变量,用来传值。

        public string returnValue ;

 

        public Form2(string txtValue)

        {

            InitializeComponent();

 

            this.textBox1.Text = txtValue;

        }

然后在button1的单击事件中添加如下代码:

        private void button1_Click(object sender, EventArgs e)

        {

            returnValue = this.textBox1.Text;

            this.Close();

        }

 

 

 

      3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码:

        private void button1_Click(object sender, EventArgs e)

        {

            string txtValue = this.textBox1.Text;

            Form2 f2 = new Form2(txtValue);

            f2.ShowDialog();

            this.textBox1.Text = f2.returnValue;

        }

Form1 中 (父窗口:)

public class Form1 : System.Windows.Forms.Form

{

      private System.Windows.Forms.Button btnOpen;

      public System.Windows.Forms.TextBox txtContent; //注意是public

 

       ........

 

       ........

 

      [STAThread]

     static void Main()

     {

          Application.Run(new Form1());

     }

 

    private void btnOpen_Click(object sender, System.EventArgs e)

    {

       Form2 frm=new Form2(this);

       frm.ShowDialog();

    }

 

}

 

Form2中(子窗口)

 

public class Form2 : System.Windows.Forms.Form

{

           private System.Windows.Forms.Button button1;

           private System.Windows.Forms.TextBox txtValue;

 

           private Form _parentForm=null;

 

 

       public Form2()

       {  

            InitializeComponent();

       }

 

      public Form2(Form parentForm)

      {

          InitializeComponent();

          this._parentForm =parentForm;

      }

 

           ........

 

          ........

 

 

   //更新父窗口中文本框中的值!

 

     private void button1_Click(object sender, System.EventArgs e)

     {

           ((Form1)_parentForm).txtContent.Text =this.txtValue .Text ;

     }

 

}

 

 

一个小例子:将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。

 

方法如下:

 

将TextBox(命名为djzclx1)所在窗体Query_Djzclx .cs设置一个属性

private string Varvalue;

public string varvalue

{

get

            {

                return Varvalue;//返回值

            }

}

添加button1,其DialogResult属性设置为OK;

然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。

 

在ListView所在窗体添加button1,其单击事件添加如下代码:

 

private void CkDjzclx_Click(object sender, EventArgs e)

        {

            Query_Djzclx newFrmDjzclx = new Query_Djzclx();//实例化对话框窗体

            if (newFrmDjzclx.ShowDialog() == DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮

            {

                ListView.Text = newFrmDjzclx.varvalue; //这句的意思是这样,就是把属性varvalue的值回传给ListView。

            }

        }

C#窗体间传值方法总结

标签:

原文地址:http://blog.csdn.net/jacee0048/article/details/44980171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!