1. 程式人生 > >【C#】winform子窗體與父窗體傳值,子窗體與子窗體傳值

【C#】winform子窗體與父窗體傳值,子窗體與子窗體傳值

【1】子窗體與父窗體傳值

【2】子窗體與子窗體傳值:

前提:Form1座位父窗體,然後它new出來了兩個個子窗體分別為Form2與Form3;

要求:可以及時把Form2中產生的資料,傳遞給Form3,更新Form3;如果Form3沒有被開啟,則不傳遞。

窗體設計:


Form1程式碼:

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

namespace Test
{
    public partial class Form1 : Form
    {
        Form3 f3;
        Form2 f2 = new Form2();
        int i = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            f2.TitleChanged += f2_TitleChanged;
            f2.Show();
        }

        void f2_TitleChanged(object sender, Form2.TitleChangedEventArgs e)
        {
            if (f3 != null)
            {
                f3.setText(e.Title);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            f3 = new Form3();
            f3.Disposed += f3_Disposed;
            f3.Show();
        }

        void f3_Disposed(object sender, EventArgs e)
        {
            f3 = null;
        }
    }
}

Form2程式碼:

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

namespace Test
{
    public partial class Form2 : Form
    {
        public class TitleChangedEventArgs : EventArgs // 事件引數類
        {
            private string title = "";
            public string Title
            {
                get { return title; }
                set { title = value; }
            }
        }
        // 宣告委託
        public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e);
        // 定義事件
        public event TitleChangedEventHandler TitleChanged;
       
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            TitleChangedEventArgs e1 = new TitleChangedEventArgs();
            e1.Title = textBox1.Text;
            OnTitleChanged(e1);// 觸發事件
        }
        // 觸發事件的方法
        protected virtual void OnTitleChanged(TitleChangedEventArgs e)
        {
            if (TitleChanged != null)
                TitleChanged(this, e);
        }
    }
}


Form3程式碼:

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

namespace Test
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {

        }
        public  void  setText(string s)
        {
            label1.Text = s;
        }
    }
}
總結:
Form2與Form3不能直接傳值。 必須先將值傳到Form1中,然後Form1把值傳遞給Form3

By:Jim