windows forms
TRANSCRIPT
![Page 1: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/1.jpg)
Windows Forms
![Page 2: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/2.jpg)
Windows forms concept
- Все програмування побудоване на подіях та їх обробниках.
- Все є Control
![Page 3: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/3.jpg)
ApplicationКлас який полегшує роботу з нашою windows forms application.
Корисні властивості:• OpenForms
Корисні методи:• Run()• Exit()• DoEvents()
Корисні події:• ThreadException• Idle
![Page 4: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/4.jpg)
Visual Studio Form DesignerДизайнер візуал студії тільки генерує код.
![Page 5: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/5.jpg)
Іменування
- LabelControl -> lbl<name>- ButtonControl -> btn<name>- TextBox -> txt<name>- …
![Page 6: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/6.jpg)
Layout
![Page 7: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/7.jpg)
UserControl – це користувацький контрол який служить контейнером для стандартних контролів.
Створювати власний UserControl потрібно:- Коли певна частина інтерфейсу буде
перевикористовуватися.- Коли ви хочете більш логічно розділити графічний
інтерфейс.
User controls
![Page 8: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/9.jpg)
Modal\non-Modal forms
Модальна форма – це форма яка буде показана поверх всіх вікон, користувач не може працювати з іншими формами поки дана форма відкрита.
var form = new Form1(); var result = form.ShowDialog();(синхронне показування форми)
Не-модальна форма – це форма яка є рівноправною по відношенні до інших форм програми. Програма може мати декілька відкритих форм.
var form = new Form2(); form.Show();(асинхронне показування форми)
![Page 10: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/10.jpg)
Form.Close
За допомогою Close(); методу ви можете закрити форму.
1. Якщо ваша форма модальна – то після її закритят потрібно вручну викликати Dispose.
2. Якщо ваша форма НЕ модальна – то після її закритят Dispose буде викликаний у контексті Close і звільняти ресурси не треба вручну.
Якщо вам потрібно показувати не модальну формук декілька раз то можете її ховани методом Hide()
Щоб управляти процесом закриття форми можна підписатися на обробку події Form.Closing.
![Page 11: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/11.jpg)
Default buttons
![Page 12: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/12.jpg)
Якщо будь яка кнопка має встановлений 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](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/14.jpg)
WinForms + Threadings
Потік(thread) – це незалежний шлях виконання, може виконуватися одночасно з іншими потоками.
Звернаття до UI повинне здійснюватися тільки з того потоку в якому UI був створений.
![Page 15: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/15.jpg)
WinForms + Threadings
Вирішення проблем багатопоточності:1. Якщо ви не маєте змоги вплинути на багатопоточний
функціонал.
public void DoInUIThread(Action action)
{ if (InvokeRequired)
{ Invoke(new MethodInvoker(action));
} else {
action(); }
}
![Page 16: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/16.jpg)
WinForms + Threadings
Вирішення проблем багатопоточності:2. Якщо ви маєте змогу впливати на багатопоточний
функціонал – використовуйте BackgroundWorker.
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
![Page 17: Windows forms](https://reader036.vdocuments.us/reader036/viewer/2022082421/559281de1a28ab4a678b4642/html5/thumbnails/17.jpg)
Usability