1. 程式人生 > >C# 子窗體與父窗體之間幾種傳值的方式

C# 子窗體與父窗體之間幾種傳值的方式

做了很多專案,很多專案都用到子父窗體之間的傳值。。

父窗體傳入子窗體都比較簡單,而子窗體傳入父窗體因為有很多不通道的需求,所以·搞起來有點頭大。

先說父窗體傳入子窗體:

將父窗體控制元件上的值傳入子窗體的控制元件上:

Form1為父窗體

Form2為子窗體

Form1 單擊按鈕開啟Form2,Form2關閉的時候把值傳到Form1的控制元件上

程式碼:

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

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this.textBox1.Text);
            if (f2.ShowDialog() == DialogResult.OK)
            {
                this.textBox1.Text = f2.TextBoxValue;
                f2.Close();
            }

        }

    }
}
Form2的程式碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        public Form2():this(null)
        {
            
        }

        public string TextBoxValue
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        public Form2(string value) {
            InitializeComponent();
            TextBoxValue = value;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }
       
    }
}

這是傳值方式是最基本,租常見的一種,還有一種方式,就是開啟子窗體Form2後,在往Form2上的控制元件上輸入值的時候,Form1上的控制元件上的值也跟著變化,

對於這種情況,問你就需要使用 事件委託來完成。

----------------------------------------------------------快樂的分割線-------------------------------------------------------------

Form1程式碼:

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

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.TextBoxChanged += new EventHandler(
                (sender1, e1) =>
                { textBox2.Text = f2.TextBoxValue; }
            );
            f2.FormClosed += new FormClosedEventHandler(
                (sender2, e2) => { f2 = null; }
            );
            f2.Show(this);
        }
    }
}
Form2程式碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        public Form2():this(null)
        {
            
        }

        public string TextBoxValue
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        public event EventHandler TextBoxChanged;

        public Form2(string value) {
            InitializeComponent();
            TextBoxValue = value;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (TextBoxChanged != null)
            {
                TextBoxChanged(this, e);
            }
        }
    }
}
這裡需要使用 TextBox的TextChanged事件。

上面就是兩種子窗體傳入父窗體值的方法。


相關推薦

C# 窗體窗體之間方式

做了很多專案,很多專案都用到子父窗體之間的傳值。。 父窗體傳入子窗體都比較簡單,而子窗體傳入父窗體因為有很多不通道的需求,所以·搞起來有點頭大。 先說父窗體傳入子窗體: 將父窗體控制元件上的值傳入子窗體的控制元件上: Form1為父窗體 Form2為子窗體 Form1 單

iOS頁面間方式

傳值方法 屬性 方法 代理 block 通知 單例 頁面間傳值有八大傳值方式,下面我就簡單介紹下頁面間常用的傳值方式,但對於每種方式的詳細介紹由於內容很多,我會把每種方式單獨列出作為一篇文章詳細介紹,本文不做詳細說明 屬性傳值 第二個介面(Det

Struts2頁面到action的方式

struts2中的Action接收表單傳遞過來的引數有幾種方法: 傳統的做法如,登陸表單login.jsp: <form action="login" method="post" name=

C#窗體窗體互動

父窗體呼叫子窗體 父窗體在建立子窗體後,可以直接通過子窗體物件呼叫子窗體中的公有屬性和方法。 Form2 f2 = new Form2(); string value= f2.value; f2.getValue();

C#】winform窗體窗體窗體窗體

【1】子窗體與父窗體傳值 【2】子窗體與子窗體傳值: 前提:Form1座位父窗體,然後它new出來了兩個個子窗體分別為Form2與Form3; 要求:可以及時把Form2中產生的資料,傳遞給Form

C++ boost庫之間,去掉頂層const,動態轉換

template<class _Ty1, class _Ty2> shared_ptr<_Ty1> static_pointer_cast(const shared_ptr<_Ty2>& _Other) { // return

之間的方法過載、隱藏、重寫虛方法呼叫

由於子類物件同時“彙集了”父類和子類的所有公共方法,如果子類中某個方法與父類方法的簽名一樣(即方法名和方法引數都一樣),那當通過子類物件訪問此方法時,訪問的是子類還是父類所定義的方法? 總的來說,子類方法與父類方法之間的關係可以概括為以下三種。    擴充(Extend):

視窗視窗之間訊息

一.子視窗控制元件向父視窗傳送訊息 a.由於子視窗控制元件都是系統內部定義的,即訊息處理回撥函式和視窗類由系統部署 b.子控制元件產生相對應控制元件的所屬事件時,(系統會處理子控制元件)並向父視窗傳送

Java之間的物件轉換(說明繼承)

      在使用Java的多型機制時,常常使用的一個特性便是子類和父類之間的物件轉換。從子類向父類的轉換稱為向上轉換(upcasting),通過向上轉換,我們能夠在編寫程式時採用通用程式設計的思想,在需要使用子類物件的時候,通過把變數定義為父型別,我們可以通過一個變數,使用

Java之間的物件轉換

在使用Java的多型機制時,常常使用的一個特性便是子類和父類之間的物件轉換。從子類向父類的轉換稱為向上轉換(upcasting),通過向上轉換,我們能夠在編寫程式時採用通用程式設計的思想,在需要使用子類物件的時候,通過把變數定義為父型別,我們可以通過一個變數,使

iframe頁面頁面之間互相操作的方法。

jQuery取得iframe中元素的幾種方法 在iframe子頁面獲取父頁面元素 程式碼如下: $('#objId', parent.document); 在父頁面 獲取iframe子頁面的元素 程式碼如下: $("#objid",documen

浮動div撐開div的方法、給select賦、zoom樣式的含義、實現select下拉框readonly

disable hid 對象 居中 使用說明 child react back for 1.浮動子div撐開父div的幾種方法: (1)在父div中在添加一個清除浮動的子div<div style=" clear:both;"></div>,該div

應用層內核的通信方式

物理內存 是什麽 nts iat 其他 輸入緩沖 BE virt getc 應用程序與驅動程序據我所知,細分可以分6種,ReadFile,WirteFile方式的緩沖區設備讀寫,直接方式讀寫,和其他方式讀寫。Io設備控制操作(即DeviceControl)的緩沖內存模式IO

iOS類之間的三方式

一代理方式 什麼是代理模式 傳入的物件,代替當前類完成了某一個功能,稱為代理模式. 實現代理有以下方法 在要傳值的類中 1> 宣告代理方法 2> 定義代理屬性 3> 在適當的時候呼叫代理方法 在要接受值的類中 1&g

Makefile中的方式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JS有哪方式?

這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【JS有哪幾種傳參方式?】 (1)背景介紹: js中的傳值方式,對於簡單型別(比如字串和

Activity之間的三方式

*************************************** 第一種:Extras:額外的,附加的.在Intent中附加額外的訊息 //傳值 Intent intent = new Intent(this, XXXActivity.class); intent.pu

Vue問題的分析

在學習vue過程中自己總結了幾種元件間傳值的方式 1、路由傳參 步驟: ①定義路由時加上引數props: true,在定義路由路徑時要留有引數佔位符: name『用法: to=”’路徑/’+value”』 ②在跳轉到的頁面加上引數props

vue路由query和params的方式

在專案中需要路由傳參,查看了官方文件以及參考了網上其他資料,現總結如下: 一/ params傳參 佔位符:id //宣告式 <router-link :to=`/home/${name}`> //程式設計式 skipMethod (name) {

JS有哪方式

js有哪幾種傳參方式?小課堂【深圳-web-A組】目錄1.背景介紹2.知識剖析3.常見問題4.解決方案5.編碼實戰6.擴充套件思考7.參考文獻8.更多討論1.背景介紹我們今天講的傳參是指頁面之間的資料傳遞。傳統的前端開發中,頁面之間是少有引數互動的,甚至沒有,而在如今的前端環