Как изменить форму и обновить ее из другой формы

Я использую две формы:

Форма1 содержит кнопку1

Форма2 содержит кнопку2 и панель1

Мой проект начинает использовать Form2. Затем я нажимаю кнопку 2, чтобы показать форму 1.

    private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.Show();
    }

Затем в Form1 я нажимаю кнопку 1, чтобы скрыть Panel1 в Form2.

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 FormInstance = new Form2();
        FormInstance.displayInit();
        FormInstance.Refresh();
    }

displayInit() — это метод внутри Form2:

    public void displayInit()
    {
        panel1.Visible = false;
    }

Но панель не скрыта из-за проблемы с обновлением, есть идеи?


person Sami-L    schedule 16.08.2012    source источник
comment
Добавьте FormInstance.Show() в button1_Нажмите, чтобы увидеть созданную вами новую форму. Есть много отличных книг, которые помогут вам изучить объектно-ориентированное программирование.   -  person Hans Passant    schedule 17.08.2012
comment
Спасибо, Ганс. Есть ли способ передать изменения в первоначально отображаемую форму Form2?   -  person Sami-L    schedule 17.08.2012


Ответы (1)


Стандартный способ общения двух форм (или любых двух классов) друг с другом — с помощью событий.

В вашем случае добавьте это в начало кода Form1:

public event ClosePanelHandler ClosePanel;
public delegate void ClosePanelHandler(object sender, EventArgs e);

Затем в событии Form1 Button1_Click (это вызывает событие):

 private void button1_Click(object sender, EventArgs e)
    {
     if (ClosePanel != null){
       ClosePanel(this, new EventArgs());
    }}

-

Наконец, Form2 необходимо обработать событие (и прослушивать его), чтобы выполнить действие:

 private void HandleCloseRequest(object sender, EventArgs e)
    {
     panel1.Visible = false;
    }

Кроме того, изменить

private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.ClosePanel += HandleCloseRequest;
        Frm.Show();
    }

Надеюсь, это немного поможет.

person Holger Brandt    schedule 16.08.2012
comment
Фантастика, это сработало как шарм, большое спасибо, Хольгер. - person Sami-L; 17.08.2012
comment
@AlphaBird, пожалуйста. Я внес небольшое изменение в событие button1_Click Form1, чтобы проверить наличие null. (Если на событие не подписаны слушатели, возвращается null, которое вызовет исключение, если мы не проверим его.) - person Holger Brandt; 17.08.2012