Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как обратиться к MDIChild


Автор: ДобренькийПапаша 20.7.2009, 14:31
Есть MDI-контейнер, в нём StripMenu тут есть возможность выбора отображения информации в проводнике (в ListView находящемся в дочерней форме) крупными значками, мелкими ну и так далее.

Как грамотно менять свойство View в дочерней форме из родительской?

Код

 private void MainForm_Load(object sender, EventArgs e) //прогрузка контейнера
        {
            #region Открытие дочерней формы
            Explorer ex = new Explorer(Login);
            ex.MdiParent = this;
            ex.WindowState = FormWindowState.Maximized;
            ex.Show();
            #endregion
            крупныеЗначкиToolStripMenuItem.Checked = true;
        }


Надо из событий нажатия menuItem обращаться каким-то макаром к объекту ex? Или есть какой-то гуманный способ (через свойство какое-нибудь)?

Автор: diadiavova 20.7.2009, 15:07
MdiChildren возвращает коллекцию дочерних форм. В ней и  ищи.

Автор: ДобренькийПапаша 20.7.2009, 15:29
Код

Form[] curchild=this.MdiChildren;


Дочерняя форма в curchild[0]. Проверил. Но обратиться к её объектам не могу. Например:
curchild[0].ExploreView не проходит, ExploreView не видит (это объект ListView), объявлен он как public...
Почему? И что делать?)))

Автор: Любитель 20.7.2009, 15:33
Надо просто прокастить curchild[0] к типу твоей формы.

Автор: diadiavova 20.7.2009, 15:35
Цитата(ДобренькийПапаша @  20.7.2009,  16:29 Найти цитируемый пост)
Но обратиться к её объектам не могу. Например:
curchild[0].ExploreView не проходит, ExploreView не видит (это объект ListView), объявлен он как public...
Почему? И что делать?))) 

Потому что MdiChildren возвращает коллекцию, каждый элемент которой имеет тип Form, а в этом типе нет такого метода. Если ты точно знаешь, что нужная форма имеет тип, например MyForm, то и приведи её к этому типу, тогда всё будет доступно
Код

MyForm mf = (MyForm)curchild[0];

И с этим работай.

Автор: Bladerender 20.7.2009, 15:57
По опыту скажу что не все так просто. Если ты хочеш доступатся к например ТекстБокс1 на MDIChild, то подкастить к форме можно будет,  но самих елементов там не увидиш. Нужно будет юзать MyForm.Controls.Find() и получать в итоге нужный контрол и потом уже к нему обращаться по назначению, типа EditBox.Text = "xxx".

Автор: diadiavova 20.7.2009, 16:00
Bladerender, если контрол объявлен как private, то конечно(а по-умлчанию так и есть).  У топикастера он public, оптимальный вариант internal

Добавлено через 2 минуты и 19 секунд
А ещё лучше оставить private, а доступ получать через свойства.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)