我使用的是具有两个面板的MDIparent表单。 panel1包含form1,panel2包含form2。我想在form2上的click按钮上隐藏form1上的按钮。我该怎么办?
答案 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