}
private void мозаикаВертикальноToolStripMenuItem_Click(object sender, EventArgs e)
{ // вертикальная мозаика
This.LayoutMdi(MdiLayout.TileVertical);
}
private void закрытьТекущееToolStripMenuItem_Click(object sender, EventArgs e)
{ // закрытие текущего (активного) окна с проверкой, существует ли такое
if (this.ActiveMdiChild != null) ActiveMdiChild.Close();
}
private void закрытьВсеToolStripMenuItem_Click(object sender, EventArgs e)
{ // два варианта закрытия всех подчиненных окон
/* for (int i = MdiChildren.Length — 1; i = 0; i—)
MdiChildren[i].Close();*/
while (this.ActiveMdiChild != null) ActiveMdiChild.Close();
}
ActiveMdiChild – системная переменная, указатель на активное в данный момент окно.
MdiChildren – массив указателей на подчиненные окна.
Может возникнуть необходимость создания подчиненного окна в единственном экземпляре. Для этого необходимо после его создания заблокировать пункт меню его открытия и разблокировать его при закрытии окна. Для этого используем пункт меню Окна – Единственная форма. Этому пункту меню дадим имя FormA и он должен иметь атрибут доступа public. Создаем таким образом почти пустую форму Form4. в число ее переменных включим сссылку на главное окно: public Form1 f1;
Создание и открытие этого окна:
private void FormA_Click(object sender, EventArgs e)
{
Form4 f4;
f4 = new Form4();
f4.MdiParent = this;
FormA.Enabled = false;//закроем пункт меню
f4.f1 = this;// передаем адрес главного окна в Form4
F4.Show();
}
При закрытии пункт меню Единственная форма ( его имя FormA) должен быть снова освобожден. Тонкость в следующем: форму можно закрыть несколькими способами: нажатием на командную кнопку, нажатием на кнопку ´, через системное меню и т.д. В любом случае пункт меню должен быть разблокирован. Для этого используем событие, связанное с закрываемым окном:
FormClosed (происходит после закрытия) или FormClosing (происходит до закрытия). В нашем случае можно использовать любое из них. Найдем нужное событие в списке, делаем на его имени двойной щелчок и пишем реализацию:
private void Form4_FormClosed(object sender, FormClosedEventArgs e)
{
f1.FormA.Enabled = true;
}
В MDI-приложениях возможно изменение меню в главном окне при открытии того или иного подчиненного окна. Для этого создаем меню в подчиненном окне. При открытии этого окна оно соединяется с меню главного окна.
Контрольные вопросы
1. Какие диалоговые средства для управления работой программой Вы знаете?
2. Какие способы представления массивов на формах Вы знаете? Какие их преимущества и недостатки?
3. Проанализируйте отличия MDI- и SDI-приложений.
Объектно-ориентированное программирование в Microsoft Visual Studio 2005
В предыдущих главах мы рассмотрели, как писать программы на C# (по процедурной и по объектно-ориентированной методике), а также создание интерфейса средствами Microsoft Visual Studio 2005. Рассмотрим в этой главе, как объединить в одно целое все изложенное выше: как построить программы для решения прикладных задач и как построить интерфейс для них. Имеются следующие возможности, которые мы по очереди рассмотрим:
1. Дополнить классы форм собственными данными и функциями для решения прикладных задач. Другими словами, объединить в классах интерфейс и логику прикладной задачи.
2. Создать отдельные классы для решения прикладных задач, предусмотрев в их методах (в том числе и в конструкторах) формальные параметры и возвращаемые значения для взаимодействия с интерфейсом. Чтение (запись) данных из интерфейса (в интерфейс) и их передача в методы обеспечивается средствами Visual Studio.
3. Передать в классы прикладных задач указатели на формы (или на компоненты на форме); чтение (запись) данных из форм осуществляется методами классов.
4. В методах классов прикладной задачи предусмотреть открытие форм для ввода/вывода.
Статьи к прочтению:
How to use MDI Forms in Visual Basic 2008/2010
Похожие статьи:
-
Конструкторы. зарезервированные слова super и this. блоки инициализации
Как уже говорилось, объекты в Java создаются с помощью зарезервированного слова new, после которого идёт конструктор – специальная подпрограмма,…
-
Локальные и глобальные переменные. модификаторы доступа и правила видимости. ссылка this
Как уже говорилось, данные в подпрограмму могут передаваться через глобальные переменные. Это могут быть поля данных объекта, в методе которого…