Додаток виндовс формс скачати як додати. Програмування в .NET Framework. Тести для LoginPresenter
Сьогодні я хочу розповісти про те, як створити проект Windows Forms на C++ в IDE Visual Studio 2013. Справа в тому, що, починаючи з VS 2012, у списку проектів, які можна створити, прибрали пункт Windows Forms. Я зараз говорю про те, що на C++, створити такий проект на C# можна, вибравши відповідний пункт у розділі проектів, що створюються. Однак той факт, що такий проект не можна вибрати зі списку, не говорить про те, що його не можна створити самому. Саме про це я хочу розповісти в цій статті.
Перше, що потрібно зробити - запустити Visual Studio. Як тільки VS запустили, послідовно натискаємо Файл > Створити > Проект
Після цього у вікні буде запропоновано вибрати тип проекту. Нам необхідно вибрати у розділі Visual C++ підрозділ CLR і вибрати пункт Пустий проект CLR.
Коли проект буде створено, у браузері рішень клацаємо правою кнопкою миші за створеним проектом. У контекстному меню, що відкрилося, послідовно вибираємо Додати > Створити елемент і в меню, що відкрилося, в розділі UI вибираємо Форма Windows Forms
Коли форму буде додано, в браузері рішень вибираємо файл MyForm.cpp. Перед вами відкриється Нова вкладказ єдиним рядком коду:
#include "MyForm.h"
У цей файл нам необхідно додати наступний код:
Using namespace System; використовуючи namespace System::Windows::Forms; void Main(array
Після цього у властивостях проекту. Вибираємо підрозділ Системарозділу Компонувальник і в рядку Підсистема з меню вибираємо Windows (/SUBSYSTEM:WINDOWS) і натискаємо Застосувати.
Не закриваючи вікно властивостей проекту, переходимо до підрозділу Додатково та у рядку Точка входупишемо Mainі після цього натискаємо клавішу ОК.
На цьому налаштування проекту закінчуються. Для редагування зовнішнього вигляду форми необхідно перейти у вкладку MyForm.h [Конструктор], клацнувши двічі по файлу MyForm.h в браузері рішень.
Доброго часу доби!
Model-View-Presenter – досить відомий шаблон проектування. З першого погляду все виглядає просто: є модель (Model), яка містить всю бізнес-логіку екрану; Вид/Подання (View), який знає, як відобразити ті чи інші дані; Представник (Presenter), який є сполучною ланкою - реагує на події користувача в View, змінюючи Model, і навпаки.
Складність починається, коли кількість форм у проекті стає більшою за одну.
У цій статті розглядається:
- Трохи теорії;
- загальні проблемиреалізації MVP (зокрема Passive View) під Windows Forms;
- особливості реалізації переходів між формами та передача параметрів, модальні вікна;
- використання IoC-контейнера та шаблону Dependency Injection – DI (а саме Соnstructor Injection);
- деякі особливості тестування MVP програми (з використанням NUnit та NSubstitute);
- все це відбуватиметься на прикладі міні-проекту і намагатиметься бути наочним.
У статті торкається:
- Застосування шаблону Адаптер (Adapter);
- Проста реалізація шаблону Контролер програми (Application Controller).
Для кого ця стаття?
Головним чином для розробників-початківців на Windows Forms, які чули, але не пробували, або пробували, але не вийшло. Хоча впевнений, що деякі прийоми можна застосувати і для WPF, і навіть для веб-розробки.
Постановка задачі
Придумаємо просте завдання - реалізувати 3 екрани:1) екран авторизації;
2) головний екран;
3) модальний екран зміни імені користувача.
Повинно вийти щось на кшталт цього:
Трохи теорії
MVP, як і його батько, MVC (Model-View-Controller) придуманий для зручності розподілу бізнес-логіки від способу її відображення.На просторах інтернету можна зустріти безліч реалізацій MVP. За способом доставки даних на подання їх можна розділити на 3 категорії:
- Passive View: View містить мінімальну логіку відображення примітивних даних (рядки, числа), рештою займається Presenter;
- Presentation Model: у View можуть передаватися не лише примітивні дані, а й бізнес-об'єкти;
- Supervising Controller: View знає про наявність моделі та сам забирає з неї дані.
Далі розглядатиметься модифікація Passive View. Опишемо основні риси:
- інтерфейс Подання (IView), який надає якийсь контракт відображення даних;
- Подання - конкретна реалізація IView, яка вміє відображати саму себе в конкретному інтерфейсі (чи то Windows Forms, WPF або навіть консоль) і нічого не знає про те, хто їй керує. У разі це форми;
- Модель – надає деяку бізнес-логіку (приклади: доступ до бази даних, репозиторії, сервіси). Може бути представлена у вигляді класу або знову ж таки, інтерфейсу та реалізації;
- представник містить посилання на Подання через інтерфейс (IView), керує ним, підписується на його події, здійснює просту валідацію (перевірку) введених даних; також містить посилання на модель або її інтерфейс, передаючи в неї дані з View і запитуючи оновлення.
Типова реалізація представника
public class Presenter ( private readonly IView _view; private readonly IService _service; public Presenter( IView view, IService service) ( _view = view; _service = service; _view.UserIdChanged += () => UpdateUserInfo(); ) private void ) ( var user = _service.GetUser(_view.UserId); _view.Username = user.Username; _view.Age = user.Age; ) )
Які плюси нам дає мала пов'язаність класів (використання інтерфейсів, подій)?
1. Дозволяє відносно вільно змінювати логіку будь-якого компонента, не ламаючи решту.
2. Великі можливості при unit-тестуванні. Шанувальники TDD мають бути у захваті.
Почнемо!
Як організувати проекти?
Умовимося, що рішення складатиметься з 4-х проектів:- DomainModel – містить сервіси та всілякі репозиторії, одним словом – модель;
- Presentation - містить логіку докладання, яка залежить від візуального уявлення, тобто. все Представники, інтерфейси Уявлень та інші базові класи;
- UI - Windows Forms додаток, містить лише форми (реалізацію інтерфейсів Уявлень) і логіку запуску;
- Tests – unit-тести.
Що писати в Main()?
Стандартна реалізація запуску Windows Forms програми виглядає так:Private static void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); // безпосередній запуск форми (уявлення) )
Але ми домовилися, що Представники керуватимуть Представленнями, тому хотілося б, щоб код виглядав якось так:
Private static void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var presenter = New LoginPresenter(New LoginForm(), New LoginService());
Спробуємо реалізувати перший екран:
Базові інтерфейси
// загальні методи всім уявлень public interface IView ( void Show(); void Close(); ) // контракт, яким представник буде взаємодіяти з формою public interface ILoginView: IView ( string Username ( get; ) string Password ( get; ); ) event Action Login; // подія "користувач намагається авторизуватися" void ShowError(string errorMessage); ) public interface IPresenter ( void Run(); ) // найдурніший сервіс авторизації public interface - Успішна авторизація, інакше false )
Подання
public class LoginPresenter: IPresenter ( private readonly ILoginView _view; private readonly ILoginService _service; public LoginPresenter(ILoginView view, ILoginService service) (_view = view; _service = service; .Password); ) public void Run() ( _view.Show(); ) private void Login(string username, string password) ( if (username == null) throw new ArgumentNullException("username"); if (password == null) throw new ArgumentNullException("password"); var user = new User (Name = username, Password = password); if (!_service.Login(user)) else ( // Успішна авторизація, запуск головного екрану (?) ) ) )
Створити форму і реалізувати в ній інтерфейс ILoginView не важко, як і написати реалізацію ILoginService. Слід лише відзначити одну особливість:
Public partial class LoginForm: Form, ILoginView ( // ... public new void Show() ( Application.Run(this); ) )
Це заклинання дозволить нашому додатку запуститися, відобразити форму, а після закриття форми коректно завершити програму. Але до цього ми ще повернемось.
А випробування будуть?
З моменту написання представника (LoginPresenter), з'являється можливість відразу ж його від-unit-тестувати, не реалізуючи ні форми, ні послуги.Для написання тестів я використовував бібліотеки NUnit та NSubstitute (бібліотека створення класів-заглушок за їхніми інтерфейсами, mock).
Тести для LoginPresenter
Public class LoginPresenterTests ( private ILoginView _view; public void SetUp() ( _view = Substitute.For
Тести досить дурні, як поки й сам додаток. Але так чи інакше вони успішно пройдені.
Хто і як запустить другий екран із параметром?
Як ви могли помітити, я не написав жодного коду за успішної авторизації. Як мені запустити другий екран? Перше на думку спадає це:// LoginPresenter: успішна авторизація var mainPresenter = new MainPresenter(new MainForm()); mainPresenter.Run(user);
Але ми домовилися, що представники нічого не знають про уявлення, крім їх інтерфейсів. Що ж робити?
На допомогу приходить патерн Application Controller (реалізований спрощено), всередині якого міститься IoC-контейнер, який знає, як за інтерфейсом отримати об'єкт реалізації.
Контролер передається кожному Представнику параметром конструктора (знову DI) та реалізує приблизно такі методи:
Public interface IApplicationController ( IApplicationController RegisterView
Після невеликого рефакторингу запуск програми став виглядати так:
Private static void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // всі залежності тепер реєструються в одному місці: var controller = new ApplicationController(new LightInjectAdapder()) .RegisterView
Пару слів про новий ApplicationController(new LightInjectAdapder()) . Як IoC-контейнер я використовував бібліотеку LightInject, але не безпосередньо, а через адаптер (патерн Adapter), щоб у разі, якщо знадобиться змінити контейнер на інший, я зміг написати інший адаптер і не змінювати логіку контролера. Всі методи, що використовуються, є в більшості IoC-бібліотек, складнощів виникнути не повинно.
Реалізуємо додатковий інтерфейс IPresenter, який відрізняється лише тим, що метод Run приймає параметр. Потім успадкуємо від нього аналогічно першому екрану.
Тепер, не без гордості, запускаємо другий екран, передаючи авторизованого користувача:
Controller.Run
Не можна просто так взяти та закрити форму.
Один із підводних каменів пов'язаний із рядком View.Close() , після якого закривалася перша форма, а разом із нею і додаток. Справа в тому, що Application.Run(Form) запускає стандартний цикл обробки повідомлень Windows і розглядає передану форму як головну форму програми. Це виявляється у тому, що програма вішає ExitThread на подію Form.Closed , що викликає закриття програми після закриття форми.Обійти цю проблему можна декількома способами, один із них - використовувати інший варіант методу: Application.Run(ApplicationContext), потім вчасно замінюючи властивість ApplicationContext.MainForm. Передача контексту формам реалізована за допомогою Контролера додатка, в якому реєструється об'єкт (instance) ApplicationContext і потім підставляється в конструктор форми (знову DI) під час запуску Представника. Методи відображення перших двох екранів тепер мають такий вигляд:
// LoginForm public new void Show() ( _context.MainForm = this; Application.Run(_context); ) // MainForm public new void Show() ( _context.MainForm = this; base.Show(); )
Модальне вікно
Реалізація модального вікна не викликає труднощів. На кнопці "Змінити ім'я" виконується Controller.RunPublic new void Show() ( ShowDialog(); )
Якщо потрібно відкрити звичайне вікно, метод взагалі не потрібно визначати, оскільки він вже реалізований у класі Form.
Ну і накрутили... Як тепер ЦЕ використати?
Тепер, коли каркас готовий, додавання нової форми зводиться до таких кроків:- Пишемо інтерфейс Подання, інтерфейс Моделі (якщо потрібно).
- Реалізуємо Представника, принагідно вирішивши, чи будемо в нього передавати якісь дані чи модель.
- [Опціонально] Пишемо тести для Представника, переконуємось, що все нормально.
- [Опціонально] Реалізуємо Модель та тести для неї.
- Накидаємо форми і реалізуємо інтерфейс Уявлення.
Забрати демонстраційний проект можна з
Тепер настав час створити наш перший віконний додаток.
Важливі теми, що розглядаються в цій частині:
Додаток, що розробляється, буде невеликою формою, що повторює ідею давним-давно придуманої програми: на формі буде міститися питання «». При спробі наведення вказівника миші на кнопку « Так звичайно!вікно буде тікати від нас. Натискання на кнопку « Ніне буде нічим обмежено.
Створюючи цю програму, ми розглянемо основні принципи створення віконних додатків C#, і навіть методи реалізації з допомогою них будь-яких кінцевих цілей: у разі - це кумедно тікає вікно.
Створіть новий проект, як тип шаблону встановіть програму Windows Forms, як показано на малюнку 1:
1. Створення нового проекту.
Назвіть проект RandWindowта натисніть кнопку ОК.
Робоче вікно MS Visual Studioмістить наступні допоміжні вікна (рис. 2).
Малюнок 2. Допоміжні вікна.
На малюнку цифрам зазначено:
- Вікно Toolbox(Панель елементів управління) - елементи управління ви можете розмістити на формі, що створюється.
- Вікно Solution Explorer(Оглядач рішень) - тут ви зможете побачити такі вузли: Properties- Налаштування проекту, Links(Посилання) - підключені до проекту бібліотеки, а також створені та підключені до проекту файли вихідних кодів (з розширенням .cs) та підключені до проекту форми (наприклад, Form1).
- Вікно Class View(Вікно класів) – тут представлені усі створені у програмі класи.
- Вікно Properties(Властивості) - вибравши будь-який елемент керування або навіть форму, ви зможете побачити всі параметри даного об'єкта, а також змінити значення, встановлені за замовчуванням.
Створення віконних програм зводиться до створення всіх необхідних діалогових вікон, а також розміщення на них необхідних елементів. Надалі ми налаштовуємо обробку подій, створюваних користувачем, та налаштовуємо технічні аспекти роботи програми. У нашому випадку спочатку розмістимо всі необхідні елементи керування на головній формі, після чого додамо обробник події переміщення миші та обробку натискання кнопок.
Додавання нових елементів керування на форму
Отже, після того, як ви ввели ім'я проекту, встановили необхідний шаблон і натиснули кнопку ОК, MS Visual Studioавтоматично створить каркас віконної програми, після чого ми зможемо додати нові віконні елементи.Для цього необхідно перетягнути необхідний віконний елемент із вікна інструментів ( ToolBox).
Нашому вікну буде потрібно 2 елемента поля для введення, в які ми виводитимемо координати покажчика миші, що полегшить нам розуміння роботи програми.
У центрі вікна буде напис, який ми створимо за допомогою елемента Label.
Знизу будуть розташовані 2
кнопки.
Трохи розтягніть заготовку вікна. Якщо ви натиснете на нього правою кнопкою, відкриється контекстне меню. У ньому натисніть пункт властивості, після чого ви зможете вивчити різні параметри вікна, які ви можете змінити. На малюнку 3 зображені найнеобхідніші властивості:
Малюнок 3. Різні властивості вікна (форми) C# .NET.
Трохи розтягніть заготовку вікна та додайте всі необхідні елементи. На малюнку 4 ви можете побачити їх у вікні ToolBox:
Малюнок 4. Перетягуйте необхідні елементи з вікна Toolbox на форму, що створюється.
Перейдіть до властивостей рядка Label1де зміните текст на « Ви прагнете зробити світ кращим?». Також змініть тип шрифту, для цього знайдіть властивість Font(Рис. 5).
Рисунок 5. Властивість Font елемента Label.
Після чого встановіть тип шрифту Tahoma, ширину шрифту Boldта розмір рівний 16
(Рис. 6).
Малюнок 6. Налаштування шрифту.
Далі змініть текст на кнопках, використовуючи властивість Text.
Отримана заготовка вікна програми виглядатиме так (рис. 7).
Малюнок 7. Форма виглядатиме так.
Технічна частина роботи програми
- Спочатку ми додамо обробник події переміщення миші та реалізуємо виведення її координат xі yу два створені поля введення.
- Далі ми створимо функції обробники клацання по кожній із клавіш миші (особливо старанні користувачі все ж таки зможуть потрапити по кнопці « Так звичайно!»).
- Далі ми додамо код, який реалізує випадкове переміщення вікна в тому випадку, якщо курсор наблизиться до кнопки « Так звичайно!».
Визначення переміщення вказівника миші формою
Клацніть безпосередньо на частини форми програми ( НЕодному з елементів).Тепер перейдіть до властивостей форми за допомогою клацання правої кнопки миші -> контекстне меню властивості.
Тепер необхідно перейти до списку можливих подій, які можуть одержувати це вікно. Для цього клацніть на кнопці « Event»(Події), як показано на малюнку 8:
8. Перехід до списку можливих подій.
Коли користувач пересуває вказівник миші на вікно, операційна системапосилає повідомлення програмі з поточними координатами покажчика. Вони нам і потрібні.
Щоб призначити обробник цієї події, знайдіть рядок MouseMove(мал. 9), після чого зробіть подвійне клацання в полі праворуч від неї – автоматично додасться обробник події руху миші та додасться функція Form1_MouseMoveу коді нашої програми.
Рисунок 9. Після подвійного клацання праворуч від MouseMove з'явиться цей рядок, і автоматично здійсниться перехід до коду функції-обробника цієї події.
Додайте в цю функцію 2 рядки, щоб її код став виглядати так.
/*http://сайт, Anvi*/ private void Form1_MouseMove(object sender, MouseEventArgs e) ( // перекладаємо координату X у рядок і записує в поля введення textBox1.Text = e.X.ToString(); // переводимо координату Y в рядок та записує в поля введення textBox2.Text = e.Y.ToString();
Ця функція, що обробляє подію переміщення покажчика миші над формою, отримує 2
параметра: об'єкт відправник та екземпляр класу MouseEventsArgs, що містить інформацію про координати вказівника миші та інші поточні властивості.
textBox1і textBox2це екземпляри класу textbox, що реалізують керування нашими елементами поля для введення.
Член даних екземплярів Textдозволяє встановити текст у даних полях.
Таким чином, якщо тепер відкомпілювати програму ( F5), при переміщенні покажчика миші за формою вікна ми бачитимемо координати покажчика (всередині форми), які безперервно змінюватимуться.
Тепер повернемось до заготівлі нашої форми. Для цього клацніть на відповідній закладці (Form1.cs [Конструктор]), як показано на малюнку 10:
Малюнок 10. Перехід до конструктора форм C#.
Зробіть подвійне клацання по першій кнопці: Visual Studioавтоматично додасть код обробки цієї кнопки під час натискання.
Додайте наступні рядки коду:
/*http://сайт, Anvi*/ private void button1_Click(object sender, EventArgs e) ( // Вивести повідомлення з текстом "Ви завзяті" MessageBox.Show("Ви завзяті!!"); // Завершити додаток Application. Exit(); )
Тепер знову поверніться до конструктора і додайте другу кнопку також за допомогою подвійного клацання по ній.
/*http://сайт, Anvi*/ private void button2_Click(object sender, EventArgs e) ( // Вивести повідомлення, з текстом "Ми не сумнівалися у вашій байдужості" // другий параметр - заголовок вікна повідомлення "Увага" // MessageBoxButtons.OK - тип кнопки, що розміщується на формі повідомлення // MessageBoxIcon.Information - тип повідомлення - буде мати іконку "інформація" і відповідний звуковий сигнал MessageBox.Show("Ми не сумнівалися у вашій байдужості","Увага", MessageBoxButtons.OK, MessageBoxIcon.Information);
Як бачите, ми трохи ускладнили код виклику вікна-повідомлення, щоб продемонструвати те, як воно працює, більш детально. Усі параметри, що передаються в функцію Showзакоментовані у вихідному коді.
Тепер нам залишилося лише реалізувати переміщення вікна в той момент, коли миша наближається до кнопки. Так звичайно».
Для цього ми додамо код до функції:
private voidForm1_MouseMove(object sender, MouseEventArgs)
Принцип дуже простий: отримуючи координати руху миші, ми перевіряємо, чи не входять вони у квадрат, що окреслює нашу кнопку з невеликим запасом. Якщо так, то ми генеруємо 2 випадкові числа, які будуть використані для переміщення вікна.
Ми б могли просто відстежувати повідомлення про наведення покажчика миші на кнопку, але воно приходить з помітною затримкою, у зв'язку з чим користувач без особливих зусиль натисне на кнопку так, тому ми просто обчислюватимемо потрапляння курсору в зону навколо кнопки.
Також нам знадобиться оголосити дещо " робітниківзмінних, які ми будемо надалі використовувати.
Генерація випадкових чисел
Клас Randomв C#є генератор псевдовипадкових чисел - тобто. цей клас відповідає за видачу послідовності чисел, що відповідає певним статистичним критеріям випадковості.Random rnd = новий Random();
Тут ми оголосили екземпляр класу Random (rnd), за допомогою якого ми генеруватимемо випадкові числа. Надалі ми будемо використовувати код, виду rnd.Next(діапазон_генерації) або rnd.Next(від до -1 ) для генерації випадкового числа.
Також ми оголосимо ще кілька змінних, частина з яких одразу буде ініціалізована.
Windows.Forms.SystemInformation.PrimaryMonitorSize.Width; int _h = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
tmp_locationоголошується у тому, щоб у майбутньому тимчасово зберігати поточне становище вікна.
Також нам слід подумати про те, що при випадковому переміщенні наше вікно може вийти далеко за межі екрана.
Щоб визначити роздільну здатність екрану C# .NET , ми будемо використовувати:
/*http://сайт, Anvi*/ System.Windows.Forms.SystemInformation.PrimaryMonitorSize_hі _wзберігатимуть у собі розміри екрана користувача, які визначаються за її ініціалізації.
Тепер код цієї функції буде виглядати так:
/*http://esate.ru, Anvi*/ private void Form1_MouseMove(object sender, MouseEventArgs e) ( // переводимо координату X у рядок і записує в поля введення textBox1.Text = e.X.ToString(); // переводимо координату Y в рядок і записує в поля введення textBox2.Text = e.Y.ToString();// якщо координата по осі X і по осі Y лежить в квадраті if, що окреслюється навколо кнопки "так, звичайно" (e.X > 80 && e.X 100 && e.Y (_w - this.Width / 2) ||tmp_location.Y (_h - this.Height / 2)) ( // новими координатами стане центр вікна tmp_location.X = _w / 2; tmp_location.Y = _h / 2; ) // оновлюємо становище вікна, на нове згенероване this.Location = tmp_location; ) )
Ось, власне, і все. Відкомпелювавши програму, можете спробувати натиснути на кнопку "Так, звичайно". Це буде дуже важко.
Останнє оновлення: 31.10.2015
Для створення графічних інтерфейсів за допомогою платформи .NET застосовуються різні технології - Window Forms, WPF, програми для магазину Windows Store (для ОС Windows 8/8.1/10). Однак найбільш простою та зручною платформою досі залишається Window Forms або форми. Даний посібник ставить за мету дати розуміння принципів створення графічних інтерфейсів за допомогою технології WinForms і роботи основних елементів управління.
Створення графічної програми
Для створення графічного проекту нам знадобиться середовище розробки Visual Studio. Оскільки найбільш поширена поки що версія Visual Studio 2013, то для цього посібника я використовуватиму безкоштовну версію даного середовища Visual Studio Community 2013яку можна знайти на сторінці https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx.
Після встановлення середовища та всіх його компонентів, запустимо Visual Studio і створимо проект графічної програми. Для цього в меню виберемо пункт File (Файл) і підменю виберемо New - > Project (Створити - > Проект). Після цього перед нами відкриється діалогове вікно створення нового проекту:
У лівій колонці виберемо Windows Desktop, а в центральній частині серед типів проектів - тип Windows Forms Applicationі дамо йому якесь ім'я в полі внизу. Наприклад, назвемо його HelloApp. Після цього натискаємо OK.
Після цього Visual Studio відкриє проект із створеними за замовчуванням файлами:
Більшість простору Visual Studio займає графічний дизайнер, який містить форму майбутньої програми. Поки що вона порожня і має лише заголовок Form1. Праворуч знаходиться вікно файлів рішення/проекту – Solution Explorer (Оглядач рішень). Там і знаходяться всі пов'язані з нашим додатком файли, у тому числі файли форми Form1.cs.
Внизу праворуч знаходиться вікно властивостей – Properties. Так як у мене в даний момент вибрано форму як елемент управління, то в цьому полі відображаються властивості, пов'язані з формою.
Тепер знайдемо у цьому вікні властивість форми Text і змінимо його значення будь-яке інше:
Таким чином, ми змінили заголовок форми. Тепер перенесемо на поле якийсь елемент керування, наприклад, кнопку. Для цього знайдемо у лівій частині Visual Studio вкладку Toolbox (Панель інструментів). Натисніть на цю вкладку, і у нас відкриється панель з елементами, звідки ми можемо за допомогою миші перенести на форму будь-який елемент:
Знайдемо серед елементів кнопку і, захопивши її покажчиком миші, перенесемо на форму:
Це – візуальна частина. Тепер приступимо до самого програмування. Додамо найпростіший код мовою C#, який виводив би повідомлення з натискання кнопки. Для цього ми повинні перейти до файлу коду, який пов'язаний із цією формою. Якщо у нас не відкритий файл коду, ми можемо натиснути на форму правою кнопкою миші і в меню вибрати View Code (Подивитися файл коду):
Однак скористаємося іншим способом, щоби не писати багато зайвого коду. Наведемо покажчик миші на кнопку і клацніть по ній подвійним клацанням. Ми автоматично потрапляємо у файл коду Form1.cs, який виглядає так:
Using System; використовуючи System.Collections.Generic; використовуючи System.ComponentModel; використовуючи System.Data; використовуючи System.Drawing; використовуючи System.Linq; використовуючи System.Text; використовуючи System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp ( Public partial class Form1: Form ( public Form1() ( InitializeComponent(); ) private void button1_Click(object sender, EventArgs e) ( ) ) )
Додамо виведення повідомлення після натискання кнопки, змінивши код таким чином:
Using System; використовуючи System.Collections.Generic; використовуючи System.ComponentModel; використовуючи System.Data; використовуючи System.Drawing; використовуючи System.Linq; використовуючи System.Text; використовуючи System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp ( Public partial class Form1: Form ( public Form1() ( InitializeComponent(); ) private void button1_Click(object sender, EventArgs e) ( MessageBox.Show("Привіт"); ) ) )
Запуск програми
Щоб запустити програму в режимі налагодження, натисніть клавішу F5 або зелену стрілку на панелі Visual Studio. Після цього запуститься наша форма із самотньою кнопкою. І якщо ми натиснемо кнопку на формі, то нам буде відображено повідомлення з привітанням.
Після запуску програми студія компілює його у файл із розширенням exe. Знайти цей файл можна, зайшовши до папки проекту і далі до каталогу bin/Debug або bin/Release
Розглянувши коротко створення проекту графічного докладання, ми можемо перейти до огляду основних компонентів і почнемо з форм.