Диалоговые НЕмодальные окна
Создание немодальных диалогов с передачей и возвратом парамет- ров.
Окно немодального диалога создается методом 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;
}
}
}
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.