windows forms

17
Windows Forms

Upload: victor-matyushevskyy

Post on 30-Jun-2015

1.018 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Windows forms

Windows Forms

Page 2: Windows forms

Windows forms concept

- Все програмування побудоване на подіях та їх обробниках.

- Все є Control

Page 3: Windows forms

ApplicationКлас який полегшує роботу з нашою windows forms application.

Корисні властивості:• OpenForms

Корисні методи:• Run()• Exit()• DoEvents()

Корисні події:• ThreadException• Idle

Page 4: Windows forms

Visual Studio Form DesignerДизайнер візуал студії тільки генерує код.

Page 5: Windows forms

Іменування

- LabelControl -> lbl<name>- ButtonControl -> btn<name>- TextBox -> txt<name>- …

Page 6: Windows forms

Layout

Page 7: Windows forms

UserControl – це користувацький контрол який служить контейнером для стандартних контролів.

Створювати власний UserControl потрібно:- Коли певна частина інтерфейсу буде

перевикористовуватися.- Коли ви хочете більш логічно розділити графічний

інтерфейс.

User controls

Page 8: Windows forms

Form Lifecycle

http://www.c-sharpcorner.com/uploadfile/mamta_m/windows-forms-events-lifecycle/

1. Move2. Load3. VisibleChanged4. Activated5. Shown6. Paint7. Deactivate8. Closing9. Closed

Page 9: Windows forms

Modal\non-Modal forms

Модальна форма – це форма яка буде показана поверх всіх вікон, користувач не може працювати з іншими формами поки дана форма відкрита.

var form = new Form1(); var result = form.ShowDialog();(синхронне показування форми)

Не-модальна форма – це форма яка є рівноправною по відношенні до інших форм програми. Програма може мати декілька відкритих форм.

var form = new Form2(); form.Show();(асинхронне показування форми)

Page 10: Windows forms

Form.Close

За допомогою Close(); методу ви можете закрити форму.

1. Якщо ваша форма модальна – то після її закритят потрібно вручну викликати Dispose.

2. Якщо ваша форма НЕ модальна – то після її закритят Dispose буде викликаний у контексті Close і звільняти ресурси не треба вручну.

Якщо вам потрібно показувати не модальну формук декілька раз то можете її ховани методом Hide()

Щоб управляти процесом закриття форми можна підписатися на обробку події Form.Closing.

Page 11: Windows forms

Default buttons

Page 12: Windows forms

Якщо будь яка кнопка має встановлений DialogResult то після її натиснення (якщо форма була показана як модальна) – форма контейнер закриється і ShowDialog() поверне встановлений DialogResult.

Якщо після натиснення кнопки ми вручну проставимо DialogResult то форма (якщо форма була показана як модальна) закриється і ShowDialog() поверне встановлений DialogResult.

private void btnOk_Click(object sender, EventArgs e) {

DialogResult = DialogResult.OK; }

Якщо ваше діалогове вікно буде закрите Х (у верхньому куті вікна), або викличеться метод Close(), та ви не встановлювали значення DialogResult вручну, то результатом закриття буде DialogResult.Cancel;

Dialogs & DialogResults

Page 13: Windows forms

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {

const string message = "Are you sure that you would like to close the form?"; const string caption = "Form Closing"; var result = MessageBox.Show(

message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No) {

e.Cancel = true; }

}

MessageBoxes

Page 14: Windows forms

WinForms + Threadings

Потік(thread) – це незалежний шлях виконання, може виконуватися одночасно з іншими потоками.

Звернаття до UI повинне здійснюватися тільки з того потоку в якому UI був створений.

Page 15: Windows forms

WinForms + Threadings

Вирішення проблем багатопоточності:1. Якщо ви не маєте змоги вплинути на багатопоточний

функціонал.

public void DoInUIThread(Action action)

{ if (InvokeRequired)

{ Invoke(new MethodInvoker(action));

} else {

action(); }

}

Page 16: Windows forms

WinForms + Threadings

Вирішення проблем багатопоточності:2. Якщо ви маєте змогу впливати на багатопоточний

функціонал – використовуйте BackgroundWorker.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

Page 17: Windows forms

Usability