我想在两个子窗体之间进行一些通信,每个子窗体都是从父窗体打开的(单独的按钮显示每个窗体)。我想更改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; }