如何在子窗体设置父窗体的按钮可见?

解决方案 »

  1.   

    Form1  
    private void button1_Click(object sender, EventArgs e)
            {
                button1.Visible=false;
                Form2 r = new Form2(this);
                r.Show();
            }Form2
     Form1 fr;
            public Form2(Form1 frm)
            {
                fr = frm;
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                fr.button2.Visible = true;
            }
      

  2.   

    这也要代码?
    父窗体的定义中加一个属性,将此Button暴露出去,子窗体获得父窗体的引用之后,就可以通过此属性来使用该Button了。
      

  3.   

    3L的,button1的声明在外面是看不见的。
      

  4.   


    那一个属性可以将此Button暴露出去?
      

  5.   

    VS窗体设计器里改成公开可见就ok了嘛...
      

  6.   

    写事件
    比如子窗体中加一个CheckBox控件,Modify属性改成Public(不建议这么操作,可以自定义事件,如何自定义,查MSDN){
    //父窗体Show子窗体代码
    ChildForm fc = new ChildForm();
    fc.CheckBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
    }
    private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                this.btn1.Hide();
            }
      

  7.   

    我们这里假设已经存在了两个窗体分别为:FormFather(父窗体)和FormChild(子窗体),而父窗体中有一个名为Btn_OpenChild的按钮,用来打开子窗体,子窗体中也有个名为Btn_IsTrue按钮和一个TextBox控件。当TextBox控件中输入“True”时,父窗体的Btn_OpenChild可用,并关闭子窗体,当输入其它任何字符或字符串父窗体的Btn_OpenChild都不可用而不关闭子窗体,当然刚启动程序时的父窗体的Btn_OpenChild按钮是可用的。下面是实现的代码:   1//下面是主窗体的代码
    2using System;
    3using System.Collections.Generic;
    4using System.ComponentModel;
    5using System.Data;
    6using System.Drawing;
    7using System.Text;
    8using System.Windows.Forms;
    9
    10namespace MDIFormDemo
    11{
    12     public partial class FormFather : Form
    13     {
    14         public FormFather()
    15         {
    16             InitializeComponent();
    17         }
    18
    19         private void OpenChild()//在MDI父窗体中显示子窗体
    20         {
    21             foreach (Form f in this.MdiChildren)
    22             {
    23                 if ((f) is FormChild)
    24                 {
    25                     f.Activate();
    26                     return;
    27                 }
    28             }
    29             FormChild frm = new FormChild(this);
    30             frm.MdiParent = this;
    31             frm.Show();
    32         }
    33
    34         private void FormFather_Load(object sender, EventArgs e)
    35         {
    36             OpenChild();//父窗体被打开时,子窗体也同时被打开
    37         }
    38         private void Btn_OpenChild_Click(object sender, EventArgs e)
    39         {
    40             OpenChild();//如果Btn_OpenChild可用,则点击此按钮也能打开子窗体
    41         }
    42}主窗体中没有什么特别的,只是注意第29行的代码中的“this”,接合子窗体的代码你就能明白为何要加上这个“this”了(平时只为了打开子窗体时,我们都不会需要在括号中输入“this”)。
    //下面是子窗体的代码 
    1using System;
    2using System.Collections.Generic;
    3using System.ComponentModel;
    4using System.Data;
    5using System.Drawing;
    6using System.Text;
    7using System.Windows.Forms;
    8
    9namespace MDIFormDemo
    10{
    11     public partial class FormChild : Form
    12     {
    13         private FormFather MyForm;
    14         public FormChild (FormFather f)
    15         {
    16             InitializeComponent();
    17             MyForm = f;
    18         }
    19
    20         private void FormChild_Load(object sender, EventArgs e)
    21         {
    22
    23         }
    24
    25         private void Btn_IsTrue_Click(object sender, EventArgs e)
    26         {
    27              if (this.textBox1.text == "True")
    28              {
    29                    MyForm.Btn_OpenChild.Enabled = true;
    30                   this.Close();
    31              }
    32              else
    33              {
    34                   MyForm.Btn_OpenChild.Enabled = false;
    35              }
    36         }
    37}主窗体的按钮能用暂且不说,你先在子窗体的TextBox控件中输入一个非“True”的字符或字符串,此时你看看主窗体的Btn_OpenChild是否变成灰色的不可用的状态了呢?
      

  8.   

    父窗体中:
    将button设置为public;打开子窗体时:
    FormChild frm = new FormChild(this);
    frm.MdiParent = this;
    frm.frm父窗体 = this;
    frm.Show();子窗体中:
    public 父窗体 frm父窗体;在此便可以调用:frm父窗体.button.Visible=true;