如何使用另一个表单上的按钮隐藏表单上的按钮

时间:2015-08-24 18:46:38

标签: c# winforms button

我使用的是具有两个面板的MDIparent表单。 panel1包含form1,panel2包含form2。我想在form2上的click按钮上隐藏form1上的按钮。我该怎么办?

2 个答案:

答案 0 :(得分:1)

简短说明:

        => your A - form needs a click event "button_clicked"
        => MDI Parent recognize the event ( use a delegate / Listener )
        => MDI Parent has a list of his childforms
        => your B - form needs a public function "hide_button" who hides your control
        => check if your B - form is open
        => loop to the desired childform and call the function 

有关更详细的答案,请发布代码示例:)

答案 1 :(得分:0)

如果没有一个例子,这很难帮助,但让我们试试......

正如我们所看到的,您正在MDI表格中使用两个固定面板,对吧? 我不会假设您使用某种模式,但您应该这样做。请看一下:

因此,如果没有模式,我认为实现这一目标的最简单方法是使用DataBindings。

您应首先创建一个包含您要控制的所有内容的类,例如按钮中的Enabled属性。您必须使用INotifyPropertyChanged模式来生成DataBinding,因此,您的控制器可能如下所示:

internal partial class MDIParent1 : Form
{
    private IControllerChanged controller;

    public MDIParent1()
    {
        InitializeComponent();

        this.controller = new Controller();
    }
}

您的MDI表格应该有:

private void Form1_Load(object sender, EventArgs e)
{
    this.button1st.DataBindings.Add("Enabled", this.controller, "Button1Enabled", false, DataSourceUpdateMode.OnPropertyChanged);
}

包含按钮的表单可能包含:

private void button3rd_Click(object sender, EventArgs e)
{
    this.controller.Button1Enabled = !this.controller.Button1Enabled;
}

将控制Button的表单可能包含:

private void DoSomething()
{
    if(YourControl.InvokeRequired)
    {
        YourControl.BeginInvoke(new Action(DoSomething));
        return;
    }
    YourControl.Property=Value;
}

有了这个想法,您就可以控制固定表格上的所有内容。

使用这个例子,我做了一个非常非常简单的程序,试图找出你的必要性。请看一下https://github.com/anderson-rancan/stackoverflow_32189531