這是老生常談的一個問題,百度上太多方法了,對錯先不說。只想介紹最簡單、明了的方法
這里介紹兩種方法:
1、無參
2、有參
前提:
1、不管什么方法,窗體間傳值,要被調用 的方法、控件、函數等等,修飾符都要先設置為Public
2、新建父、子兩個窗體
主窗體 Main:
子窗體 Child:
一,無參(大部分人喜歡用這種)
只介紹一點:Owner屬性,VS的解釋:獲取或者設置擁有此窗體的窗體 ,換種通俗的說法,說明它支持讀取和修改。
Main后台代碼:
namespace MainChild
{
public partial class Main : Form { public Main() { InitializeComponent(); } /// <summary> /// 被調用的值 /// </summary> public string callStr { get { return callTxt.Text.Trim(); } set { callTxt.Text = value; } } private void ChildFrmBtn_Click(object sender, EventArgs e) { Child child = new Child(); //Owner的意義,官方解釋:獲取或者設置擁有此窗體的窗體 child.Owner = this; child.Show(); } } }
Child后台代碼:
namespace MainChild
{
public partial class Child : Form { /// <summary> /// 主窗體定義 /// </summary> Main main; public Child() { InitializeComponent(); } /// <summary> /// 獲取父窗體值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetCallBtn_Click(object sender, EventArgs e) { //實例化:獲取主窗體中的窗體 main = (Main)this.Owner; GetCallTxt.Text = main.callStr; } /// <summary> /// 設置父窗體值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ModifyBtn_Click(object sender, EventArgs e) { //實例化:獲取主窗體中的窗體 main = (Main)this.Owner; main.callStr = ModifyTxt.Text.Trim(); } } }
簡單吧,子窗體讀取和設置,2行代碼,運行效果:
二、有參(也可以說是構造函數,我個人喜歡用這種,代碼更少哈哈!!!)
窗體設置同樣,不同的是傳參
Main.cs
public partial class Main : Form
{
public Main() { InitializeComponent(); } /// <summary> /// 被調用的值 /// </summary> public string callStr { get { return callTxt.Text.Trim(); } set { callTxt.Text = value; } } private void ChildFrmBtn_Click(object sender, EventArgs e) { Child child = new Child(this);//這里this child.Show(); } }
不同於無參,有參的時候必需在構造體中申明,獲取傳參
Child.cs
public partial class Child : Form
{
/// <summary>
/// 主窗體定義
/// </summary>
Main main; public Child(Main frm) { InitializeComponent(); main=frm;//這就是獲取參數 } /// <summary> /// 獲取父窗體值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetCallBtn_Click(object sender, EventArgs e) { GetCallTxt.Text = main.callStr; } /// <summary> /// 設置父窗體值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ModifyBtn_Click(object sender, EventArgs e) { main.callStr = ModifyTxt.Text.Trim(); } }
好了,兩種方法的實現的結果都 一樣,就看個人喜歡了!