Lektsia_7VP
.pdfМногооконный
интерфейс
SDI = Single–Document Interface
MDI = Multiple–Document Interface
Родительские и дочерние формы
Родительская форма может содержать несколько дочерних окон. Только одно из дочерних окон может быть активно в один момент времени.
2
Создание родительской формы
IsMdiContainer = true;
Установить компонент MenuStrip на форму
Создайте пункт меню верхнего уровня, свойству Text которого присвоено значение &File, с пунктами вложенного меню &New и &Close. Создайте также пункт меню верхнего уровня &Window.
Присвойте свойству MdiWindowListItem элемента
MenuStrip значение &Window ToolStripMenuItem.
3
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 newMDIChild = new Form2(); newMDIChild.MdiParent = this; newMDIChild.Show();
}
this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
Задайте для свойства Anchor значение Top, Left Для свойства Dock значение Fill
4
Копирование данных.
Определение активной дочерней MDIформы.
Класс Clipboard
Метод SetDataObject вызывается, чтобы поместить данные в буфер обмена.
GetDataObject вызывается для того, чтобы извлечь данные из буфера обмена. Данные возвращаются как объект, реализующий интерфейс IDataObject.
DataFormats, GetFormats, GetData
5
Clear(), SetФормат (например SetText)
ContainsФормат (например ContainsText)
GetФормат (например GetText)
Добавьте данные как массив Byte в поток MemoryStream и передайте поток MemoryStream в метод SetData.
STAThreadAttribute
ActiveMdiChild, ActiveControl
6
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
Form activeChild = this.ActiveMdiChild; if (activeChild != null)
{
try
{
RichTextBox theBox = (RichTextBox)activeChild.ActiveControl; if (theBox != null)
{
Clipboard.SetDataObject(theBox.SelectedText);
}
}
catch
{
MessageBox.Show("Надо выбрать RichTextBox.");
}
}
}
7
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
Form activeChild = this.ParentForm.ActiveMdiChild; if (activeChild != null)
{
try
{
RichTextBox theBox = (RichTextBox) activeChild.ActiveControl;
if (theBox != null)
{
IDataObject data = Clipboard.GetDataObject
();
if (data.GetDataPresent(DataFormats.Text))
{
theBox.SelectedText = data.GetData (DataFormats.Text).ToString();
}
}
}
catch
{
MessageBox.Show("Надо выбрать RichTextBox.");
|
} |
} |
8 |
} |
|
Упорядочение дочерних форм интерфейса MDI
Метод LayoutMdi с перечислением MdiLayout
Cascade Все дочерние окна интерфейса MDI располагаются каскадом внутри клиентской области родительской формы MDI.
TileHorizontal Все дочерние окна интерфейса MDI располагаются сверху вниз в пределах клиентской области родительской формы MDI.
TileVertical Все дочерние окна интерфейса MDI располагаются слева направо в пределах клиентской области родительской формы MDI.
ArrangeIcons Все дочерние значки интерфейса MDI располагаются внутри клиентской области родительской формы MDI.
9
private void cascadeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
private void verticalToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}
private void horizontalToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
10