Диалоговые НЕмодальные окна
Создание немодальных диалогов с передачей и возвратом параметров.
Окно немодального диалога создается методом Show().
Особенности:
1. Управление после создания формы немедленно передается на следующий оператор после Show().
2. Родительская форма продолжает получать сообщения.
3. Родительская форма не получает никакого уведомления о том, что дочерняя форма закрыта.
Статическое свойство OpenForms класса Application возвращает коллекцию открытых форм, из которой можно выбрать ссылку на требуемую форму:
Form1 f1 = (Form1)Application.OpenForms["Form1"];
Первый вариант.
Создаем немодальные окна. Управляем доступностью форм.
Все формы остаются видимыми на экране, но доступ к ним либо разрешается, либо запрещается.
Для запрещения создания других форм-дубликатов, кроме первой Form2, в Form1 используем свойство this.Enabled = false. При выходе из формы Form2 (события Form2_FormClosing или Form2_FormClosed) разрешаем (f1.Enabled = true) использование формы Form1.
По кнопке Закрыть или по меню Закрыть закрываем форму и делает ее невидимой.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click (object sender, EventArgs e)
{
Form2 f2 = new Form2();
this.Enabled = false;
f2.Show();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_FormClosing (object sender,
FormClosingEventArgs e)
{
// так как форма Form1 не закрыта, она доступна
Form1 f1 = (Form1)Application.OpenForms["Form1"];
f1.Enabled = true;
}
}
}
Второй вариант.
Создаем немодальные окна. Управляем видимостью форм.
Перед вызовом Form2, в Form1 устанавливаем ее невидимость: this.Visible = false. При выходе из формы Form2 (события Form2_FormClosing или Form2_FormClosed) устанавливаем видимость (f1.Visible = true) формы Form1.
Форма Form2 становится невидимой при выходе из формы по кнопке Закрыть или по меню Закрыть.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click (object sender, EventArgs e)
{
Form2 f2 = new Form2();
this.Visible = false;
f2.Show();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{ InitializeComponent(); }
private void Form2_FormClosing (object s,
FormClosingEventArgs e)
{
Form1 f1 = (Form1)Application.OpenForms["Form1"];
f1.Visible = true;
}
}
}
Способ использования данных из других форм
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{ InitializeComponent(); }
public string strF1 = "форма1 ";
Form2 f2 = null;
private void button1_Click(object sender, EventArgs e)
{
this.Enabled = false;
f2 = new Form2();
f2.Show();
// show=true;
}
// Нельзя щелкать на второй кнопке раньше первой,
// так как f2 будет = null
private void button2_Click(object sender, EventArgs e)
{
// Здесь д.б. проверка на то, что форма 2 отработала: if (show) ...
// Используем строку из формы 2,
// так как объект f2 не уничтожен.
MessageBox.Show(f2.strF2);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{ InitializeComponent(); }
public string strF2 = "форма2 ";
private void Form2_FormClosed(object sender,
FormClosedEventArgs e)
{
strF2 = "Изменили строку в Форме 2";
// Используем строку из формы 1,
// так как объект f1 не уничтожен.
Form1 f1 = (Form1)Application.OpenForms["Form1"];
MessageBox.Show (f1.strF1);
f1.Enabled = true;
}
}
}
MDI приложения
MDI приложения позволяют приложению отображать сразу несколько документов одновременно, каждый в своем окне. Такие окна являются окнами немодальных диалогов.
В родительском окне необходимо установить свойство IsMdiContainer в true.
Как правило, у родительского окна создают пункт меню «Окно» со свойством MdiList=true. В этом случае в пункт «Окно» будут автоматически добавляться подпункты, образующие список всех открытых окон.
Новая форма добавляется в проект, как и любой другой элемент.
Для MDI приложения конструируется, как правило, только одна дочерняя форма, на основе которой создается несколько дочерних окон.
Для того чтобы создаваемое окно отображалось как дочерняя форма приложения, необходимо установить его свойство MdiParent равным this.
Окно создается в обработчике события меню методом Show().
Пример:
private void menuNew_Click(object sender, EventArgs e)
{
Form2 wnd = new Form2();
wnd.MdiParent = this;
wnd.Show();
}
Дочерние окна не закрывают родительские элементы управления, поэтому эти ЭУ всегда доступны.
Дата добавления: 2019-02-08; просмотров: 584;