当前位置:  编程技术>.net/c#/asp.net

C#子界面按钮改变父界面属性的简单方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:    想法如下: 一个c#的小程序,在一个主界面使用按钮创建一个子界面显示同时隐藏自己,在子界面的一个按钮可以改变主界面的显示属性(Visible)使主界面显示,然后销毁自己。 想到了使用线程及委托进行界面传值,因为...

 

想法如下:
一个c#的小程序,在一个主界面使用按钮创建一个子界面显示同时隐藏自己,在子界面的一个按钮可以改变主界面的显示属性(Visible)使主界面显示,然后销毁自己。

想到了使用线程及委托进行界面传值,因为以前用过,但是后来觉得这样做有点复杂,又线程又委托的,有点麻烦啊。

这里提供一种简单的实现方法,供诸位参考。

这种方法不用创建线程不使用委托,也不用在构造函数里做手脚,直接就调用即可。
 

代码示例:

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

 有关c#子界面按钮改变父界面属性,以及父窗口与子窗口间传值的方法,就介绍这些吧,希望对大家有所帮助。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在安装redhat时,没选择图形界面,如何在命令界面安装图形界面?
  • 红旗Linux如何将图形界面KDE切换成文本控制台界面,两个界面如何互为切换?
  • 我装的是Red Hag Linux 9.0 装完可以进入图形界面,可是我想进入控制台界面,怎么进入,从图形界面可以进入吗?
  • 如何在图形界面与文字界面之间切换?
  • linux 启动只能进入图形界面,怎么让起动可以进入字符界面?
  • 请问unix 操作系统是窗口界面还是文字界面的?
  • 用qt编了两个界面,在其中一个界面上得到的数据怎样在第二个界面上实时显示?
  • flyingcrean,怎样快速切换字符界面与X Window图形界面?
  • 在Miracle linux的text界面下用什么命令进入图形界面?
  • 新手问题,在linux下c/c++开发是在图形界面下还是字符界面下进行? iis7站长之家
  • 怎么样选择进入不同的图形界面,有四个图形界面!帮忙!
  • RedHat 9.0 怎样设置让启动的时候是文本界面而不是图形界面?
  • 在vmWare下,图形界面与命令行界面的转换!
  • 调查:大家用red hat7.3一般是用字符界面还是用图形界面?
  • 由于显示器性能,无法启动图形界面,如何更改为字符界面?
  • 如何将linux命令行界面变为图形化界面
  • 如何在字符界面下更改linux的X图形界面?
  • 新手问题,在linux下c/c++开发是在图形界面下还是字符界面下进行?
  • 怎么在图形界面和命令行界面切换
  • 如何 实现视窗界面与命令界面的切换。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3