子表单之间的通信

时间:2018-08-30 15:26:04

标签: c# winforms

我想在两个子窗体之间进行一些通信,每个子窗体都是从父窗体打开的(单独的按钮显示每个窗体)。我想更改numericalUpDown的可见性和值以及文本框的可见性和文本。

我使用过属性,get部分运行正常,但是set部分仅在child.show()事件上有效,例如当我单击Child1Form.button以显示Child2Form时,“设置”部分有效,但是如果我不显示Child2Form,则它不起作用。

以Child1形式:

public string TxtBx1TextChild1
{
    get { return TextBox1.Text; }
    set { TextBox1.Text = value; }
}
public bool NUD1VisibilityChild1
{
    get { return NumericalUpDown1.Visible; }
    set { NumericalUpDown1.Visible = value; }
}

以Child3形式:

这有效:

_OnButtonClick以显示Child1表单。

Child1 child1 = new Child1();
child1.TxtBx1TextChild1 = "Ops...";
child1.NUD1VisibilityChild1=false;
child1.Show();

这不起作用:

_OnAnotherButtonClick,同时显示Child1和Child2表单。

Child1 child1 = new Child1();
child1.TxtBx1TextChild1 = "ops...";
child1.NUD2VisibilityChild1=false;

我还将对象(NUD和txtBx)修饰符更改为public,并尝试进行更改,但是也失败了。

在Child3中:

_OnButtnClick事件:

Child1 child1 = new Child1();
Child1.TextBox1.Text="Opsssss…";
numericalUD1Pass.Visible=false;

我从一个公共设置文件中使用了Child1和Child3中两个numericUPDown(Properties.Setting.Default.mySettingFile)。它适用于值(意味着更改值),但不适用于可见性更改。

我还使用了表单事件处理。该方法已触发并且消息已正确显示,但是文本和可见性的更改没有。

在我称为发布者表单的父母一方,表示Child3表单:

Child3 child3 = new Child3();
Child1 child1 = new Child1();
child3.Child1Button2Clicked += child1.child3_Child1Button2Clicked;
child3.Show();

在订阅者(收听者)方面:

两个子窗体之间的事件处理,每个子窗体都从同一父窗体打开(两个孩子-一个父窗体)。

public void child3_Child1Button2Clicked(object sender, FormsCommunication e)
{
    NumericalUD1.Visible = e.NumericalUDPass;
    textBox1.Text = e.textBoxPass;
    MessageBox.Show("it got fire" + ": " + e.NumericalUDPass.ToString() + ": " + e.textBoxPass.ToString());
 }

在发布者方面:

public event EventHandler<FormsCommunication> Child1Button2Clicked;

//button click event to set the values and fire the method.
private void Child3Btn1_Click(object sender, EventArgs e)
{
    FormsCommunication formsCommunication = new 
    FormsCommunication("2782",Convert.ToBoolean(false));

    OnChild1Button2Clicked(formsCommunication);

}

protected virtual void OnChild1Button2Clicked(FormsCommunication e)
{
    Child1Button2Clicked?.Invoke(this, e);
}

EventArgs类中的构造函数:

 public FormsCommunication(string textBox, bool NumericalUD)
 {
    textBoxPass = textBox;
    NumericalUDPass = NumericalUD;   
 }

 public string textBoxPass { get; private set; }
 public bool NumericalUDPass { get; private set; }

enter image description here

0 个答案:

没有答案