Вызов общедоступного метода в Windows Forms

У меня есть 1 форма MDI, которая содержит 1 элемент управления панелью, и 1 форма с 1 кнопкой, которая служит для того, чтобы панель в MDI не была видна.

Код в форме MDI:

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

Код в форме 1:

        private void button1_Click(object sender, EventArgs e)
    {
        displayInit();
    }

Ошибка: имя «displayInit» не существует в текущем контексте. Любые советы, пожалуйста?


person Sami-L    schedule 15.08.2012    source источник
comment
когда вы говорите форму MDI, вы имеете в виду дочернюю или родительскую форму MDI?   -  person James Barrass    schedule 15.08.2012


Ответы (2)


Попробуйте сослаться на родителя (и привести его):

((MyMDIForm)this.MDIParent).displayInit();

Это, вероятно, не лучший способ сделать это, хотя. Подумайте о том, чтобы дочерняя форма вызывала событие для родительской MDI. Разделение забот.

person LarsTech    schedule 15.08.2012
comment
Теперь сработало, спасибо, LarsTech, не могли бы вы уточнить свой комментарий: подумайте о том, чтобы дочерняя форма вызывала событие для родителя MDI. Разделение забот. - person Sami-L; 15.08.2012
comment
@AlphaBird Ваша дочерняя форма не должна знать подробности родительской формы. Это усложнит поддержку кода в будущем. Таким образом, вместо того, чтобы заставлять дочернюю форму знать что-либо о родительской форме, вы можете сделать так, чтобы дочерняя форма вызывала событие, что-то вроде UpdateDisplay(...). Когда вы создаете свои дочерние формы, вы добавляете этот обработчик событий, и когда событие вызывается, основная форма может вызывать displayInit() сама. Вы также можете изменить этот метод на частный, а не на общедоступный. - person LarsTech; 15.08.2012

Метод displayinit() является методом экземпляра, поэтому вам нужен экземпляр для его вызова из

MyMDIForm.displayInit();

при создании формы MDI сохраните ссылку на нее и используйте эту ссылку при вызове ее методов.

person James Barrass    schedule 15.08.2012
comment
MyMDIForm.displayInit(); не работает как есть, пожалуйста, что вы имеете в виду, говоря о сохранении ссылки на вашу форму MDI. - person Sami-L; 15.08.2012
comment
@AlphaBird при вызове метода в другой форме вам нужен доступ к другой форме, в этом случае вы можете использовать MDIParent в качестве ярлыка, в других случаях при создании формы вы должны использовать MyForm FormInstance = new MyForm();, а затем, когда когда-либо нужно будет ссылаться на MyForm, он будет использовать FormInstance . Имеет ли это смысл? - person James Barrass; 16.08.2012
comment
Спасибо, JamesB, Да MyForm FormInstance = new MyForm(); является полезным. Не могли бы вы рассказать нам, как обновить отображение FormInstance - person Sami-L; 17.08.2012