C#父、子窗體間傳值等


這是老生常談的一個問題,百度上太多方法了,對錯先不說。只想介紹最簡單、明了的方法

這里介紹兩種方法:

  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(); } }

   好了,兩種方法的實現的結果都 一樣,就看個人喜歡了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM