Диалоговые НЕмодальные окна
Оценка 4.8

Диалоговые НЕмодальные окна

Оценка 4.8
docx
18.11.2021
Диалоговые НЕмодальные окна
Л2-002228.docx

Диалоговые НЕмодальные окна

Создание немодальных диалогов с передачей и возвратом парамет- ров.

Окно немодального диалога создается методом 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;

}

}

}


 

Диалоговые НЕмодальные окна

Диалоговые НЕмодальные окна

WindowsApplication1 { public partial class

WindowsApplication1 { public partial class

Форма Form2 становится невидимой при выходе из формы по кнопке

Форма Form2 становится невидимой при выходе из формы по кнопке

}

}

Способ использования данных из других форм using

Способ использования данных из других форм using

Form2 : Form { public

Form2 : Form { public
Скачать файл