如何在C#中的第二个表单中隐藏表单中的按钮

时间:2019-02-14 01:27:19

标签: c# forms

我有一个具有2种形式的C#项目。第一个有3个按钮。我需要能够从第二个表单中隐藏带有复选框的2个(button1和button2)按钮,而且我不知道如何从第一个表单中调用按钮。

这是form1

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

    private void button3_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();

        frm.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {

    }
  }
}

这是Form2

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

    private void Form2_Load(object sender, EventArgs e)
    {
        checkBox1.Checked = Properties.Settings.Default.checkB;

        if (checkBox1.CheckState == CheckState.Checked)
        {
            ?????????
        }
      }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        Properties.Settings.Default.checkB = checkBox1.Checked;
        Properties.Settings.Default.Save();
    }
   }
 }

4 个答案:

答案 0 :(得分:1)

这是在我的情况下可以使用的最终版本,这要感谢那些回答了我的问题并帮助我获得此答案的人

Form1

namespace test1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Form2 frm = new Form2();
        frm.checkBox1.Checked = Properties.Settings.Default.checkB;

        if (frm.checkBox1.CheckState == CheckState.Checked)
        {
            button1.Visible = false;
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show(this); 
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {

    }
  }
}

Form2

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

    private void Form2_Load(object sender, EventArgs e)
    {
        checkBox1.Checked = Properties.Settings.Default.checkB;

        if (checkBox1.CheckState == CheckState.Checked)
        {
            Form1 f1 = (Form1)this.Owner;
            f1.button1.Visible = false; 
        }
    }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        Properties.Settings.Default.checkB = checkBox1.Checked;
        Properties.Settings.Default.Save();
    }
}
}

按钮和复选框设置为“修饰符-公共”

答案 1 :(得分:0)

您需要公开第一个表单上的按钮,然后在创建第一个表单的实例后就可以访问它们,您需要将该表单传递给第二个表单。

答案 2 :(得分:0)

可能想研究构建从一种形式触发并由另一种形式处理以禁用按钮的事件。

答案 3 :(得分:0)

另一种选择是在Show()命令中将表单作为“所有者”传递:

private void button3_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.Show(this); // pass Form1 reference in to our instance of Form2
}

在Form2中,将Owner属性转换回Form1,以便您可以访问它(假设您已经按照建议将按钮的Modifys属性更改为public):

private void Form2_Load(object sender, EventArgs e)
{
    checkBox1.Checked = Properties.Settings.Default.checkB;

    if (checkBox1.CheckState == CheckState.Checked)
    {
        Form1 f1 = (Form1)this.Owner;
        f1.button1.Visible = false; // or whatever your buttons are called
    }
}

这几乎完全是我之前发布的内容...您需要更改按钮的Modifiers属性,以便它们是公共的,并且可以从Form2中看到。