当前位置:编程学习 > C#/ASP.NET >>

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

&

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,