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

    }

http://www.cnblogs.com/freeliver54/archive/2009/02/11/1388173.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值