程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中子界面按鈕改變父界面屬性的一種簡單方法

C#中子界面按鈕改變父界面屬性的一種簡單方法

編輯:C#入門知識

昨天師妹問了我一個問題,說想做一個小程序,在一個主界面使用按鈕創建一個子界面顯示同時隱藏自己,在子界面的一個按鈕可以改變主界面的顯示屬性(Visible)使主界面顯示,然後銷毀自己。

一開始我想到了使用線程及委托進行界面傳值,因為以前用過,但是後來覺得這樣做有點復雜,又線程又委托的,總覺得還有更簡單的方式,所以就一直嘗試,想了N種辦法,最終根據別人的提供的思路,找到了最簡單的方式。

這種方法不用創建線程不使用委托,也不用在構造函數裡做手腳,直接就調用即可,代碼量及其少,而且還不用增加額外開銷,個人覺得不錯。

//Form1代碼:

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


        private void btn_CreateForm2_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Form2 myform2 = new Form2();
            myform2.Owner = this;
            myform2.ShowDialog();
        }
    }


//Form2代碼:

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }


        private void btn_DispForm1_Click(object sender, EventArgs e)
        {
            Form1 myform1 = (Form1)this.Owner;
            myform1.Visible = true;
            this.Close();
        }
    }


//End...

以上代碼經試驗可行。

 


以下摘自博客園的一篇關於父窗口與子窗口傳值的幾種方法,可供需要的人參考:


父窗體給子窗體傳值案例
==================
1.點擊Form1的button1 打開Form2

 


父窗體給子窗體傳值 可以調用重載子窗體的構造函數 直接傳入相關數值


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


        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2(this.textBox1.Text);
            frm2.Show();
        }
    }


    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }


        public Form2(string strTextBox1Text)
        {
            InitializeComponent();
            this.textBox2.Text = strTextBox1Text;
        }
    }


2.點擊Form1的button1 打開Form2

 


並調用子窗體Form2的公開屬性或方法 將Form1的textBox1的值設置給Form2的textBox2

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


        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.TextBox2Text = this.textBox1.Text;
            frm2.Show();
        }
    }


    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }


        public string TextBox2Text
        {
            set { this.textBox2.Text = value; }
            get { return this.textBox2.Text; }
        }      
    }
 

3.點擊Form1的button1 打開Form2

 


在Form2_Load調用父窗體Form1的公開屬性或方法 將Form1的textBox1的值設置給Form2的textBox2


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


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


        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show(this);//或 frm2.ShowDialog(this);


            ////或者
            //Form2 frm2 = new Form2();
            //frm2.Owner = this;
            //frm2.Show();//或 frm2.ShowDialog();
        }

    }

 


    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }


        private void Form2_Load(object sender, EventArgs e)
        {
            Form1 frm1 = (Form1)this.Owner;
            this.textBox2.Text = frm1.TextBox1Text;
        }
    }


子窗體給父窗體傳值
==================
4.點擊Form1的button1 打開Form2
  再點擊Form2的button2
  在button2_Click事件中 通過this.Owner將Form2的textBox2的值設置給Form1的textBox1並關閉Form2

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show(this);//或 frm2.ShowDialog(this);

            ////或者
            //Form2 frm2 = new Form2();
            //frm2.Owner = this;
            //frm2.Show();//或 frm2.ShowDialog();
        }
    }

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form1 frm1 = (Form1)this.Owner;
     //注意 如果textBox1是放在panel1中的 則先找panel1 再找textBox1
            ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
            this.Close();
        }
    }


5.點擊Form1的button1 打開Form2
   再點擊Form2的button2
   在button2_Click事件中 通過this.Owner及調用父窗體Form1的公開屬性或方法
   將Form2的textBox2的值設置給Form1的textBox1並關閉Form2
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show(this);//或 frm2.ShowDialog(this);

            ////或者
            //Form2 frm2 = new Form2();
            //frm2.Owner = this;
            //frm2.Show();//或 frm2.ShowDialog();
        }
    }

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form1 frm1 = (Form1)this.Owner;
            frm1.TextBox1Text = this.textBox2.Text;
            this.Close();
        }

    }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved