Общение между детскими формами - PullRequest
0 голосов
/ 30 августа 2018

Я хочу установить связь между двумя дочерними формами, каждая из которых открывается из родительской формы (отдельная кнопка для отображения каждой формы). Я хочу изменить видимость и значение numericalUpDown, а также видимость и текст текстового поля.

Я использовал свойства, часть get работает отлично, но часть set работает только для события child.show(), например. когда я нажимаю Child1Form.button, чтобы показать Child2Form, часть "set" работает, но если я не показываю 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 Event:

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

Я использовал из общего файла настроек для двух числовых UPDown в Child1 и Child3 (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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...