windows forms

Post on 30-Jun-2015

1.019 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Windows Forms

Windows forms concept

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

- Все є Control

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

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

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

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

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

Іменування

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

Layout

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

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

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

інтерфейс.

User controls

Form Lifecycle

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

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

Modal\non-Modal forms

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

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

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

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

Form.Close

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

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

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

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

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

Default buttons

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

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

private void btnOk_Click(object sender, EventArgs e) {

DialogResult = DialogResult.OK; }

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

Dialogs & DialogResults

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

WinForms + Threadings

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

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

WinForms + Threadings

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

функціонал.

public void DoInUIThread(Action action)

{ if (InvokeRequired)

{ Invoke(new MethodInvoker(action));

} else {

action(); }

}

WinForms + Threadings

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

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

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

Usability

top related