Úvod do formulárov Windows c#. Vlastnosti implementácie MVP pre Windows Forms

  1. https://metanit.com/sharp/windowsforms/1.1.php

    Úvod do Windows Forms

    Na vytváranie grafických rozhraní pomocou platformy .NET sa používajú rôzne technológie - Window Forms, WPF, aplikácie pre Windows Store (pre Windows 8/8.1/10). Najjednoduchšou a najpohodlnejšou platformou je však stále Window Forms. Cieľom tejto príručky je poskytnúť pochopenie princípov vytvárania grafických rozhraní pomocou technológie WinForms a obsluhy základných ovládacích prvkov.

    Vytvorenie grafickej aplikácie
    Na vytvorenie grafického projektu potrebujeme vývojové prostredie Visual Studio. Keďže najbežnejšou verziou je zatiaľ Visual Studio 2013, pre tento tutoriál použijem bezplatnú verziu tohto prostredia Visual Studio Community 2013 ktorý nájdete na https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx.

    Po nainštalovaní prostredia a všetkých jeho komponentov spustite Visual Studio a vytvorte projekt grafickej aplikácie. Ak to chcete urobiť, vyberte v menu položku Súbor a z podmenu vyberte Nový -> Projekt. Potom sa pred nami otvorí dialógové okno na vytvorenie nového projektu:

    V ľavom stĺpci vyberte Pracovná plocha systému Windows a v strednej časti spomedzi typov projektov vyberte typ Aplikácia Windows Forms a do poľa nižšie mu dajte nejaký názov. Nazvime to napríklad HelloApp. Potom kliknite na tlačidlo OK.

    Potom Visual Studio otvorí náš projekt s vytvorenými predvolenými súbormi:

    Väčšinu priestoru vo Visual Studiu zaberá grafický dizajnér, ktorý obsahuje podobu budúcej aplikácie. Zatiaľ je prázdny a má iba hlavičku Form1. Vpravo je okno so súbormi riešení/projektov – Solution Explorer. Tu sa nachádzajú všetky súbory spojené s našou aplikáciou, vrátane súborov formulárov Form1.cs.

    Vpravo dole je okno Vlastnosti. Keďže momentálne mám formulár vybratý ako ovládací prvok, toto pole zobrazuje vlastnosti spojené s formulárom.

    Teraz nájdime vlastnosť Text formulára v tomto okne a zmeňte jej hodnotu na akúkoľvek inú:

    Preto sme zmenili názov formulára. Teraz premiestnime do poľa nejaký ovládací prvok, napríklad tlačidlo. Ak to chcete urobiť, nájdite kartu Toolbox na ľavej strane Visual Studia. Klikneme na túto záložku a otvorí sa nám panel s prvkami, odkiaľ môžeme myšou pretiahnuť ľubovoľný prvok do formulára:

    Nájdite tlačidlo medzi prvkami a uchopte ho ukazovateľom myši a presuňte ho do formulára:

    Toto je vizuálna časť. Teraz poďme k samotnému programovaniu. Pridajme najjednoduchší kód v C#, ktorý by po stlačení tlačidla zobrazil správu. Aby sme to dosiahli, musíme prejsť do súboru kódu, ktorý je priradený k tomuto formuláru. Ak nemáme otvorený súbor s kódom, môžeme kliknúť pravým tlačidlom myši na formulár a v zobrazenej ponuke vybrať položku Zobraziť kód:

    Použijeme však inú metódu, aby sme nenapísali veľa zbytočného kódu. Umiestnite kurzor myši na tlačidlo a dvakrát naň kliknite. Automaticky sa dostaneme do súboru s kódom Form1.cs, ktorý vyzerá takto:

    Používanie systému;

    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;

    pomocou System.Windows.Forms;

    HelloApp
    {

    {
    verejný formulár1()
    {
    InitializeComponent();
    }


    {

    }
    }
    }
    Pridajme výstup správy po stlačení tlačidla a zmeňte kód takto:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    }

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    MessageBox.Show("Ahoj");
    }
    }
    }
    Spustenie aplikácie
    Ak chcete spustiť aplikáciu v režime ladenia, kliknite na kláves F5 alebo zelenú šípku na paneli Visual Studio. Potom sa spustí náš formulár s jedným tlačidlom. A ak klikneme na tlačidlo vo formulári, zobrazí sa nám uvítacia správa.

    Po spustení aplikácie ju štúdio skompiluje do súboru s príponou exe. Tento súbor nájdete tak, že prejdete do priečinka projektu a potom do adresára bin/Debug alebo bin/Release

    Po krátkom pohľade na vytvorenie projektu grafickej aplikácie môžeme prejsť k prehľadu hlavných komponentov, počnúc formulármi.

  2. https://metanit.com/sharp/windowsforms/2.1.php

    Práca s formulármi
    Základy tvaru

    Vzhľad aplikácie sa nám prezentuje predovšetkým prostredníctvom formulárov. Tvary sú základným stavebným kameňom. Poskytujú kontajner na rôzne ovládacie prvky. A mechanizmus udalostí umožňuje prvkom formulára reagovať na vstup používateľa, a tak interagovať s používateľom.

    Pri otvorení projektu vo Visual Studiu v grafickom editore môžeme vidieť vizuálnu časť formulára – časť, ktorú vidíme po spustení aplikácie a kam prenášame prvky z ovládacieho panela. V skutočnosti však formulár skrýva výkonnú funkčnosť pozostávajúcu z metód, vlastností, udalostí atď. Uvažujme o základných vlastnostiach foriem.

    Ak spustíme aplikáciu, zobrazí sa nám jeden prázdny formulár. Avšak aj taký jednoduchý projekt s prázdnou formou má niekoľko komponentov:

    Napriek tomu, že vidíme iba formulár, východiskovým bodom vstupu do grafickej aplikácie je trieda Program nachádzajúca sa v súbore Program.cs:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.Linq;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    Program statickej triedy
    {
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
    }
    }
    }
    Program najprv spustí túto triedu a potom použije výraz Application.Run(new Form1()) na spustenie Form1. Ak zrazu chceme zmeniť počiatočný formulár v aplikácii na nejaký iný, potom musíme zmeniť Form1 v tomto výraze na zodpovedajúcu triedu formulára.

    Samotná forma je obsahovo zložitá. Je rozdelená na množstvo komponentov. Takže v štruktúre projektu je súbor Form1.Designer.cs, ktorý vyzerá asi takto:

    HelloApp
    {
    čiastková trieda Form1
    {
    ///


    /// Požadovaná premenná dizajnéra.
    ///

    ///


    /// Vyčistite všetky používané zdroje.
    ///

    /// pravda, ak by sa spravované zdroje mali zlikvidovať; inak nepravda.

    {

    {
    komponenty.Dispose();
    }
    základ.Zlikvidovať(likvidovať);
    }

    #region Kód vygenerovaný aplikáciou Windows Form Designer

    ///


    /// Požadovaná metóda pre podporu dizajnéra - neupravujte
    /// obsah tejto metódy s editorom kódu.
    ///


    {
    this.SuspendLayout();
    //Formulár1



    this.Name = "Formulár1";
    this.Text = "Ahoj svet!";
    this.ResumeLayout(false);

    }
    }
    Toto deklaruje čiastočnú triedu formulára Form1, ktorá má dve metódy: Dispose(), ktorá funguje ako deštruktor objektov, a InitializeComponent(), ktorá nastavuje počiatočné hodnoty vlastností formulára.

    Keď pridáte ovládacie prvky, ako napríklad tlačidlá, do tohto súboru sa pridá aj ich popis.

    Ale v praxi sa s touto triedou stretneme len zriedka, keďže plnia hlavne dizajnové funkcie – nastavenie vlastností objektu, nastavenie premenných.

    Ďalší súbor - Form1.resx- zásoby tvoria zdroje. Spravidla sa zdroje využívajú na vytváranie jednotných foriem pre niekoľko jazykových kultúr naraz.

    A dôležitejší súbor - Form1.cs, ktorý sa v štruktúre projektu nazýva jednoducho Form1, obsahuje kód alebo programovaciu logiku formulára:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    }
    }
    }
    V predvolenom nastavení existuje iba návrhár formulárov, ktorý jednoducho volá metódu InitializeComponent() deklarovanú v súbore návrhára Form1.Designer.cs. Práve s týmto súborom budeme viac pracovať.

  3. https://metanit.com/sharp/windowsforms/2.2.php

    Základné vlastnosti foriem

    Pomocou špeciálneho okna Vlastnosti na pravej strane nám Visual Studio poskytuje pohodlné rozhranie na správu vlastností prvku:

    Väčšina týchto vlastností ovplyvňuje vizuálny vzhľad formulára. Poďme sa pozrieť na hlavné vlastnosti:

    • Name: nastavuje názov formulára - presnejšie názov triedy, ktorý dedí z triedy Form
    • BackColor: Určuje farbu pozadia formulára. Kliknutím na túto vlastnosť si zo zoznamu navrhovaných farieb alebo farebnej palety vyberieme farbu, ktorá nám vyhovuje
    • BackgroundImage: Ukazuje na obrázok na pozadí formulára
    • BackgroundImageLayout: Určuje, ako bude obrázok zadaný vo vlastnosti BackgroundImage rozložený vo formulári.
    • ControlBox: Označuje, či je zobrazená ponuka formulára. Menu v tomto prípade odkazuje na menu najvyššej úrovne, kde je umiestnená ikona aplikácie, názov formulára, ako aj minimalizácia formulára a krížové tlačidlá. Ak je táto vlastnosť nepravdivá, potom neuvidíme ani ikonu, ani krížik, ktorý sa zvyčajne používa na zatvorenie formulára
    • Kurzor: definuje typ kurzora, ktorý sa používa vo formulári
    • Povolené: ak je táto vlastnosť nastavená na hodnotu false, potom nebude môcť prijímať vstup od používateľa, to znamená, že nebudeme môcť klikať na tlačidlá, zadávať text do textových polí atď.
    • Písmo: Nastaví písmo pre celý formulár a všetky ovládacie prvky, ktoré sú na ňom umiestnené. Nastavením prvkov formulára na vlastné písmo ho však môžeme predefinovať
    • ForeColor: farba písma na formulári
    • FormBorderStyle: Určuje, ako sa zobrazí okraj a záhlavie formulára. Nastavením tejto vlastnosti na Žiadne môžete vytvoriť vzhľad voľnej aplikácie
    • HelpButton: Označuje, či je zobrazené tlačidlo pomocníka formulára
    • Ikona: nastaví ikonu formulára
    • Umiestnenie: Určuje polohu vzhľadom k ľavému hornému rohu obrazovky, ak je vlastnosť StartPosition nastavená na Manuálne
    • MaximizeBox: Označuje, či bude povolené tlačidlo maximalizácie poľa v hlavičke formulára
    • MinimizeBox: Označuje, či bude dostupné tlačidlo minimalizácie okna
    • MaximumSize: nastavuje maximálnu veľkosť formulára
    • MinimumSize: nastavuje minimálnu veľkosť formulára
    • Nepriehľadnosť: nastavuje priehľadnosť formulára
    • Veľkosť: definuje počiatočnú veľkosť formulára
    • StartPosition: označuje počiatočnú pozíciu, z ktorej sa formulár zobrazí na obrazovke
    • Text: definuje názov formulára
    • TopMost: ak je táto vlastnosť pravdivá, formulár bude vždy nad ostatnými oknami
    • Viditeľné: je formulár viditeľný, ak chceme formulár pred používateľom skryť, môžeme túto vlastnosť nastaviť na false
    • WindowState: Určuje, v akom stave bude formulár pri spustení: normálny, maximalizovaný alebo minimalizovaný
    Programové nastavenie vlastností
    Pomocou hodnôt vlastností v okne Vlastnosti môžeme zmeniť vzhľad formulára podľa vlastného uváženia, ale to isté môžeme robiť dynamicky v kóde. Prejdime ku kódu, ak to chcete urobiť, kliknite pravým tlačidlom myši na formulár a v zobrazenej kontextovej ponuke vyberte položku Zobraziť kód. Pred nami sa otvorí súbor s kódom Form1.cs. Zmeňme to takto:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    Text = "Ahoj Svet!";
    this.BackColor = Farba.Akvamarín;
    toto.Šírka = 250;
    toto.Výška = 250;
    }
    }
    }

    V tomto prípade sme nakonfigurovali niekoľko vlastností zobrazenia formulára: nadpis, farba pozadia, šírka a výška. Pri používaní konštruktora formulára musíte mať na pamäti, že všetok ďalší kód musí prejsť po volaní metódy InitializeComponent(), takže všetky nastavenia vlastností sa nachádzajú za touto metódou.

    Nastavenie rozmerov formulára
    Na nastavenie veľkosti formulára môžete použiť vlastnosti ako Width/Height alebo Size. Šírka/Výška nadobúdajú číselné hodnoty, ako v príklade vyššie. Pri nastavovaní veľkostí cez vlastnosť Size musíme vlastnosti priradiť objekt typu Size:

    This.Size = new Size(200,150);
    Objekt Size zase vo svojom konštruktore prijíma číselné hodnoty na nastavenie šírky a výšky.

    Umiestnenie počiatočného formulára
    Počiatočná pozícia formulára sa nastavuje pomocou vlastnosti StartPosition, ktorá môže nadobúdať jednu z nasledujúcich hodnôt:

    • Manuálne: Pozícia formulára je určená vlastnosťou Location
    • CenterScreen: Umiestnite formulár do stredu obrazovky
    • WindowsDefaultLocation: Pozícia formulára na obrazovke je určená systémom Windows a veľkosť je určená vlastnosťou Size
    • WindowsDefaultBounds: Počiatočnú pozíciu a veľkosť formulára na obrazovke nastavuje Windows
    • CenterParent: Poloha formulára je nastavená na stred nadradeného okna
    Všetky tieto hodnoty sú obsiahnuté v enumerácii FormStartPosition, takže napríklad, aby sme formulár nastavili v strede obrazovky, musíme ho napísať takto:

    This.StartPosition = FormStartPosition.CenterScreen;
    Pozadie a jednotné farby
    Na nastavenie farby pozadia formulára aj písma musíme použiť hodnotu farby uloženú v štruktúre farieb:

    This.BackColor = Farba.Akvamarín;
    this.ForeColor = Farba.Červená;
    Okrem toho môžeme nastaviť obrázok ako pozadie vo vlastnosti BackgroundImage tak, že ho vyberieme v okne vlastností alebo v kóde zadaním cesty k obrázku:

    This.BackgroundImage = Image.FromFile("C:\Users\Eugene\Pictures\3332.jpg");
    Aby sme správne nakonfigurovali zobrazenie obrázka na pozadí, ktorý potrebujeme, musíme použiť vlastnosť BackgroundImageLayout, ktorá môže nadobúdať jednu z nasledujúcich hodnôt:

    • Žiadne: Obrázok sa umiestni do ľavého horného rohu formulára a zachová si pôvodné hodnoty
    • Dlaždica: Obraz je umiestnený na formulári ako mozaika
    • Stred: Obrázok je vycentrovaný na formulári
    • Roztiahnuť: Obrázok sa roztiahne na veľkosť formulára bez zachovania proporcií
    • Zoom: Obrázok sa roztiahne na veľkosť formulára pri zachovaní proporcií
    Umiestnime napríklad formulár do stredu obrazovky:

    This.StartPosition = FormStartPosition.CenterScreen;

  4. https://metanit.com/sharp/windowsforms/2.3.php

    Pridávanie formulárov. Interakcia medzi formulármi

    Ak chcete do projektu pridať ďalší formulár, kliknite pravým tlačidlom myši na názov projektu v okne Prieskumník riešení a vyberte Pridať->Formulár pre Windows...

    Dajme novému formuláru nejaký názov, napr. Form2.cs:

    Do nášho projektu sme teda pridali druhú formu. Teraz sa pokúsme implementovať interakciu medzi dvoma formami. Povedzme, že prvý formulár po kliknutí na tlačidlo zavolá druhý formulár. Najprv pridajte tlačidlo do prvého formulára Form1 a dvojitým kliknutím na tlačidlo prejdite do súboru kódu. Dostaneme sa teda k obsluhe udalosti kliknutia tlačidla, ktorá sa predvolene vytvorí po dvojitom kliknutí na tlačidlo:


    {

    }
    Teraz doň pridáme kód na volanie druhého formulára. Náš druhý formulár sa nazýva Form2, takže najprv vytvoríme objekt tejto triedy a potom na zobrazenie na obrazovke zavoláme metódu Show:

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    Form2 newForm = new Form2();
    newForm.Show();
    }
    Teraz urobme opak - aby druhá forma ovplyvnila prvú. Zatiaľ čo druhá forma nevie o existencii prvej. Aby ste to vyriešili, musíte nejakým spôsobom preniesť informácie o prvom formulári do druhého formulára. Využijeme na to odovzdanie odkazu na formulár v konštruktore.

    Prejdime teda k druhému formuláru a prejdeme k jeho kódu – kliknite pravým tlačidlom myši na formulár a vyberte Zobraziť kód. Zatiaľ je prázdny a obsahuje iba konštruktor. Keďže C# podporuje prepisovanie metód, môžeme vytvoriť niekoľko metód a konštruktorov s rôznymi parametrami a jednu z nich zavolať v závislosti od situácie. Takže zmeňme kódový súbor druhého formulára na nasledujúci:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár2: Formulár
    {
    verejný formulár 2()
    {
    InitializeComponent();
    }

    Verejný formulár 2 (Formulár 1 f)
    {
    InitializeComponent();
    f.BackColor = Farba.Žltá;
    }
    }
    }
    V skutočnosti sme sem pridali nový konštruktor, public Form2(Form1 f), v ktorom získame prvý formulár a nastavíme jeho pozadie na žlté. Teraz prejdime ku kódu prvého formulára, kde sme zavolali druhý formulár a zmenili ho na nasledujúci:

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    Form2 newForm = new Form2(this);
    newForm.Show();
    }
    Keďže v tomto prípade kľúčové slovo this predstavuje odkaz na aktuálny objekt - objekt Form1, tak pri vytváraní druhého formulára ho prijme (odkaz) a bude cez neho ovládať prvý formulár.

    Teraz sa po kliknutí na tlačidlo vytvorí druhý formulár, ktorý okamžite zmení farbu prvého formulára.

    Môžeme tiež vytvárať objekty aktuálneho tvaru:

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    Form1 newForm1 = new Form1();
    newForm1.Show();
    Form2 newForm2 = new Form2(newForm1);
    newForm2.Show();
    }
    Pri práci s viacerými formulármi musíte počítať s tým, že jeden z nich je hlavný – ktorý sa spúšťa ako prvý v súbore Program.cs. Ak máme naraz otvorených kopu formulárov, tak keď zavrieme ten hlavný, zavrie sa celá aplikácia a spolu s ňou aj všetky ostatné formuláre.

  5. https://metanit.com/sharp/windowsforms/2.4.php

    Udalosti vo Windows Forms. Udalosti formulára

    Windows Forms používa mechanizmus udalostí na interakciu s používateľom. Udalosti vo Windows Forms predstavujú štandardné udalosti C#, ktoré sa aplikujú iba na vizuálne komponenty a riadia sa rovnakými pravidlami ako udalosti C#. Ale vytváranie obslužných programov udalostí vo Windows Forms má stále niektoré zvláštnosti.

    Po prvé, WinForms má určitý štandardný súbor udalostí, ktoré majú z väčšej časti všetky vizuálne komponenty. Jednotlivé prvky pridávajú vlastné udalosti, ale princípy práce s nimi budú podobné. Ak chcete zobraziť všetky udalosti prvku, musíme tento prvok vybrať v poli grafického dizajnéra a prejsť na kartu udalostí na paneli formulárov. Napríklad udalosti formulára:

    Ak chcete pridať obslužný program, môžete jednoducho dvakrát kliknúť na prázdne pole vedľa názvu udalosti a Visual Studio potom automaticky vygeneruje obsluhu udalosti. Napríklad kliknutím vytvoríme obslužný program pre udalosť Load:

    A toto pole zobrazí názov metódy obsluhy udalosti Load. Štandardne sa nazýva Form1_Load.

    Ak prejdeme do súboru kódu formulára Form1.cs, uvidíme automaticky vygenerovanú metódu Form1_Load:


    {
    verejný formulár1()
    {
    InitializeComponent();
    }


    {

    }
    }
    A pri každom načítaní formulára sa spustí kód v obslužnom programe Form1_Load.

    Väčšina obslužných programov pre rôzne vizuálne komponenty má zvyčajne dva parametre: odosielateľ - objekt, ktorý spustil udalosť, a argument uchovávajúci informácie o udalosti (v tomto prípade EventArgs e).

    Ale toto je len manipulátor. Takto vytvorený handler sa pridá do súboru Form1.Designer.cs:

    HelloApp
    {
    čiastková trieda Form1
    {
    private System.ComponentModel.ICcontainer components = null;

    Chránené prepísanie void Dispose (bool likvidácia)
    {
    if (likvidácia && (komponenty != null))
    {
    komponenty.Dispose();
    }
    základ.Zlikvidovať(likvidovať);
    }
    private void InitializeComponent()
    {
    this.SuspendLayout();

    This.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(284, 261);
    this.Name = "Formulár1";
    // pridanie obsluhy
    this.Load += new System.EventHandler(this.Form1_Load);
    this.ResumeLayout(false);
    }
    }
    }
    Ak chcete pridať obslužný program, použite štandardnú syntax jazyka C#: this.Load += new System.EventHandler(this.Form1_Load)

    Ak teda chceme odstrániť takto vytvorený handler, tak musíme nielen odstrániť metódu z kódu formulára vo Form1.cs, ale aj odstrániť pridanie handleru v tomto súbore.

    Obsluhu udalostí však môžeme pridať programovo, napríklad v konštruktore formulárov:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    this.Load += LoadEvent;
    }

    Private void Form1_Load(odosielateľ objektu, EventArgs e)
    {
    }

    Súkromná void LoadEvent(odosielateľ objektu, EventArgs e)
    {

    }
    }
    }
    Okrem predtým vytvoreného obslužného programu Form1_Load je tu pridaný aj ďalší obslužný program načítania formulára: this.Load += LoadEvent;, ktorý nastaví farbu pozadia na žltú.

  6. https://metanit.com/sharp/windowsforms/2.5.php

    Vytváranie iných ako pravouhlých tvarov. Zatvorenie formulára

    V predvolenom nastavení sú všetky formuláre vo Windows Forms obdĺžnikové. Môžeme však vytvárať aj neobdĺžnikové ľubovoľné tvary. Na to slúži vlastnosť Región. Ako svoju hodnotu berie objekt triedy Region s rovnakým názvom.

    Pri vytváraní iných ako pravouhlých tvarov zvyčajne nepoužívate hranice tvaru, pretože hranice určuje tento objekt Region. Ak chcete odstrániť okraje formulára, musíte nastaviť vlastnosť FormBorderStyle formulára na Žiadne.

    Ďalším aspektom, ktorý treba zvážiť, je pohyb, zatváranie, maximalizácia a minimalizácia tvarov. To znamená, že v tomto prípade, ako v bežnom formulári, nebudeme môcť kliknutím na krížik formulár zavrieť, nebudeme ho môcť presunúť na nové miesto. Preto na to musíme dodatočne definovať logiku programu.

    Poďme teda na kód formulára a zmeňte ho takto:

    Používanie systému;
    pomocou System.Collections.Generic;
    pomocou System.ComponentModel;
    pomocou System.Data;
    pomocou System.Drawing;
    pomocou System.Linq;
    pomocou System.Text;
    pomocou System.Threading.Tasks;
    pomocou System.Windows.Forms;

    HelloApp
    {
    verejná čiastková trieda Formulár1: Formulár
    {
    Point moveStart; // ukaz na presun

    Verejný formulár 1()
    {
    InitializeComponent();
    this.FormBorderStyle = FormBorderStyle.None;
    this.BackColor = Farba.Žltá;
    button1.Text = "Zavrieť";
    }

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    this.Close();
    }

    Private void Form1_Load(odosielateľ objektu, EventArgs e)
    {
    System.Drawing.Drawing.Drawing2D.GraphicsPath myPath = new System.Drawing.Drawing2D.GraphicsPath();
    // vytvoríme elipsu s výškou a šírkou formulára
    myPath.AddEllipse(0, 0, táto.Šírka, táto.Výška);
    // pomocou elipsy vytvoríme oblasť formulára, ktorú chceme vidieť
    Region myRegion = new Region(myPath);
    // nastavenie viditeľnej oblasti
    this.Region = myRegion;
    }

    Private void Form1_MouseDown(odosielateľ objektu, MouseEventArgs e)
    {

    if (e.Button == MouseButtons.Left)
    {
    moveStart = new Point(e.X, e.Y);
    }
    }

    Private void Form1_MouseMove(odosielateľ objektu, MouseEventArgs e)
    {
    // ak je stlačené ľavé tlačidlo myši
    if ((e.Button & MouseButtons.Left) != 0)
    {
    // získame nový bod polohy formulára
    Bod deltaPos = new Point(e.X - moveStart.X, e.Y - moveStart.Y);
    // nastavenie pozície formulára
    this.Location = new Point(this.Location.X + deltaPos.X,
    toto.Poloha.Y + deltaPoz.Y);
    }
    }
    }
    }

    Vytvorenie oblasti formulára prebieha v obslužnom programe udalosti Form1_Load. Na vytvorenie oblasti sa používa grafická cesta - objekt triedy System.Drawing.Drawing2D.GraphicsPath, ku ktorému je pridaná elipsa. Grafická cesta nám umožňuje vytvárať ľubovoľný tvar, takže ak chceme tvar hviezdice, stačí si správne upraviť použitú grafickú cestu.

    Ak chcete zatvoriť formulár v obslužnom programe udalosti button click button1_Click, formulár sa zatvorí programovo: this.Close()

    Na presun formulára sa spracúvajú dve udalosti formulára – udalosť tlačidla myši a udalosť ukazovateľa myši.

  7. https://metanit.com/sharp/windowsforms/3.1.php

    Kontajnery vo formulároch Windows

    Na usporiadanie ovládacích prvkov do súvisiacich skupín existujú špeciálne prvky - kontajnery. Napríklad Panel, FlowLayoutPanel, SplitContainer, GroupBox. Rovnaký tvar je možné aplikovať aj na nádoby. Používanie kontajnerov uľahčuje správu prvkov a dáva forme aj určitý vizuálny štýl.

    Všetky kontajnery majú vlastnosť Controls, ktorá obsahuje všetky prvky daného kontajnera. Keď pretiahneme prvok z panela nástrojov do kontajnera, napríklad tlačidlo, automaticky sa pridá do tejto kolekcie tohto kontajnera. Alebo môžeme tiež pridať ovládací prvok dynamicky prostredníctvom kódu do rovnakej kolekcie.

    Dynamické pridávanie prvkov
    Pridajme do formulára tlačidlo dynamicky. K tomu pridáme udalosť načítania formulára, v ktorej sa vytvorí nový ovládací prvok. Dá sa to urobiť pomocou kódu alebo vizuálne.

    Presunutím prvkov z Panela s nástrojmi môžeme do formulára jednoducho pridať nové prvky. Táto metóda je však dosť obmedzená, pretože veľmi často je potrebné dynamicky vytvárať (mazať) prvky vo formulári.

    Ak chcete dynamicky pridať prvky, vytvorte obslužný program udalosti načítania formulára v súbore kódu:


    {
    }
    Teraz pridajte kód na pridanie tlačidla do formulára:

    Private void Form1_Load(odosielateľ objektu, EventArgs e)
    {


    helloButton.ForeColor = Farba.DarkGray;
    helloButton.Location = new Point(10, 10);

    this.Controls.Add(helloButton);
    }
    Najprv vytvoríme tlačidlo a nastavíme jeho vlastnosti. Potom ho pomocou metódy Controls.Add pridáme do kolekcie prvkov formulára. Ak by sme to neurobili, tlačidlo by sme nevideli, pretože v tomto prípade by pre náš formulár jednoducho neexistovalo.

    Pomocou metódy Controls.Remove() môžete z formulára odstrániť predtým pridaný prvok:

    This.Controls.Remove(helloButton);

    Hoci v tomto prípade bol ako kontajner použitý formulár, pri pridávaní a odstraňovaní prvkov z akéhokoľvek iného kontajnera, napríklad GroupBoxu, sa použijú rovnaké metódy.

  8. https://metanit.com/sharp/windowsforms/3.2.php

    Prvky GroupBox, Panel a FlowLayoutPanel

    GroupBox je špeciálny kontajner, ktorý je od zvyšku formulára oddelený okrajom. Má názov, ktorý sa nastavuje cez vlastnosť Text. Ak chcete vytvoriť GroupBox bez názvu, jednoducho nastavte vlastnosť Text na prázdny reťazec.

    Tento prvok sa často používa na zoskupovanie prepínačov – prvkov RadioButton, keďže umožňuje odlíšiť ich skupiny.

    Prvok Panel predstavuje panel a podobne ako GroupBox organizuje prvky do skupín. Môže vizuálne splynúť so zvyškom formulára, ak má rovnakú hodnotu farby pozadia vo vlastnosti BackColor ako formulár. Na jeho zvýraznenie môžete okrem farby určiť okraje pre prvok pomocou vlastnosti BorderStyle, ktorá má štandardne hodnotu None, teda absenciu okrajov.

    Ak má panel veľa prvkov, ktoré presahujú jeho hranice, môžeme panel posúvať tak, že jeho vlastnosť AutoScroll nastavíte na hodnotu true

    Rovnako ako formulár, GroupBox a Panel majú kolekcie prvkov a do týchto kontajnerov môžeme tiež dynamicky pridávať prvky. Napríklad vo formulári je prvok GroupBox s názvom groupBox1:

    Private void Form1_Load(odosielateľ objektu, EventArgs e)
    {
    Tlačidlo helloButton = new Button();
    helloButton.BackColor = Color.LightGray;
    helloButton.ForeColor = Farba.Červená;
    helloButton.Location = new Point(30, 30);
    helloButton.Text = "Ahoj";
    groupBox1.Controls.Add(helloButton);
    }
    Na označenie umiestnenia prvku v kontajneri použijeme štruktúru Point: new Point(30, 30);, ktorej v konštruktore prenesieme umiestnenie pozdĺž osi X a Y. Tieto súradnice sú nastavené relatívne k hornému ľavý roh kontajnera – teda v tomto prípade prvok GroupBox

    Malo by sa vziať do úvahy, že kontajner najvyššej úrovne je formulár a samotný prvok groupBox1 sa nachádza v kolekcii prvkov formulára. A ak by sme chceli, mohli by sme to odstrániť:

    This.Controls.Remove(groupBox1);
    FlowLayoutPanel
    Element FlowLayoutPanel je odvodený od triedy Panel, a preto zdedí všetky jej vlastnosti. Zároveň však pridáva ďalšie funkcie. Tento prvok vám teda umožňuje zmeniť umiestnenie a rozloženie podradených prvkov pri zmene veľkosti formulára počas vykonávania programu.

    Vlastnosť FlowDirection prvku vám umožňuje určiť smer, ktorým sú nasmerované podradené prvky. Predvolená hodnota je LeftToRight - to znamená, že prvky budú umiestnené od ľavého horného okraja. Ďalšie prvky pôjdu doprava. Táto vlastnosť môže nadobúdať aj nasledujúce hodnoty:

    • RightToLeft - prvky sú umiestnené z pravého horného rohu doľava
    • TopDown - prvky sú umiestnené z ľavého horného rohu a idú dole
    • BottomUp - prvky sú umiestnené z ľavého dolného rohu a idú hore

    Pri usporiadaní prvkov zohráva dôležitú úlohu vlastnosť WrapContents. V predvolenom nastavení je nastavená na hodnotu True. To umožňuje, aby sa prvky, ktoré sa nezmestia do panela FlowLayoutPanel, presunuli do nového riadka alebo stĺpca. Ak je hodnota False, prvky nie sú zabalené a posúvacie lišty sa jednoducho pridajú do kontajnera, ak je vlastnosť AutoScroll pravdivá.
  9. https://metanit.com/sharp/windowsforms/3.3.php

    TableLayoutPanel

    Element TableLayoutPanel tiež prepíše panel a usporiada svoje dcérske ovládacie prvky do tabuľky, pričom každý prvok má svoju vlastnú bunku. Ak chceme do bunky umiestniť viac prvkov, tak sa do tejto bunky pridá ďalší komponent TableLayoutPanel, do ktorého sa potom vnoria ďalšie prvky.

    Na nastavenie požadovaného počtu riadkov a stĺpcov tabuľky môžeme použiť vlastnosti Riadky a Stĺpce. Výberom jednej z týchto položiek v okne Vlastnosti sa nám zobrazí nasledujúce okno na nastavenie stĺpcov a riadkov:

    V poli Typ veľkosti môžeme určiť veľkosť stĺpcov/riadkov. Máme tri možné možnosti:

    • Absolútna: Nastavuje absolútnu veľkosť riadkov alebo stĺpcov v pixeloch
    • Percento: Nastaví relatívnu veľkosť v percentách. Ak potrebujeme vytvoriť plynulý návrh formulára, aby sa jeho riadky a stĺpce, ako aj ovládacie prvky v bunkách tabuľky automaticky škálovali pri zmene veľkosti formulára, musíme použiť túto možnosť
    • Automatická veľkosť: Výška riadka a šírka stĺpca sa nastavia automaticky na základe veľkosti najväčšej bunky v riadku alebo stĺpci
    Tieto hodnoty môžeme aj kombinovať, napríklad jeden stĺpec môže byť pevne stanovený s absolútnou šírkou a zvyšné stĺpce môžu mať percentuálnu šírku.

    V tomto dialógovom okne môžeme tiež pridať alebo odstrániť riadky a stĺpce. Zároveň grafický dizajnér vo Visual Studio nie vždy okamžite zobrazí zmeny v tabuľke - pridávanie alebo odstraňovanie riadkov a stĺpcov, zmena ich veľkosti, preto, ak sa vo formulári nevyskytnú žiadne zmeny, musíte ho zavrieť a potom otvoriť to opäť v grafickom dizajnérovi.

    Takže napríklad mám tri stĺpce a tri riadky, ktorých veľkosť je rovnaká - 33,33%. Do každej bunky tabuľky bolo pridané tlačidlo s nastavenou vlastnosťou Dock=Fill.

    Ak zmením veľkosť formulára, riadky aj stĺpce spolu s tlačidlami v nich uzavretými sa automaticky upravia:

    Čo je celkom vhodné na vytváranie škálovateľných rozhraní.

    V kóde môžeme dynamicky meniť hodnoty stĺpcov a riadkov. Okrem toho sú všetky stĺpce reprezentované typom ColumnStyle a riadky - typom RowStyle:

    TableLayoutPanel1.RowStyles.SizeType = SizeType.Percent;
    tableLayoutPanel1.RowStyles.Height = 40;

    TableLayoutPanel1.ColumnStyles.SizeType = SizeType.Absolute;
    tableLayoutPanel1.ColumnStyles.Width = 50;
    Ak chcete nastaviť veľkosť v ColumnStyle a RowStyle, je definovaná vlastnosť SizeType, ktorá má jednu z hodnôt enumerácie SizeType s rovnakým názvom.

    Pridanie prvku do kontajnera TableLayoutPanel má svoje vlastné zvláštnosti. Môžeme ho pridať ako v ďalšej voľnej bunke, alebo môžeme explicitne zadať bunku tabuľky:

    Button saveButton = new Button();
    // pridanie tlačidla do ďalšej voľnej bunky
    tableLayoutPanel1.Controls.Add(saveButton);
    // pridanie tlačidla do bunky (2,2)
    tableLayoutPanel1.Controls.Add(saveButton, 2, 2);

    V tomto prípade pridáme tlačidlo do bunky vytvorenej na priesečníku tretieho stĺpca a tretieho riadku. Pravda, ak nemáme toľko riadkov a stĺpcov, systém automaticky vyberie požadovanú bunku na pridanie.

  10. https://metanit.com/sharp/windowsforms/3.4.php

    Veľkosti prvkov a ich umiestnenie v kontajneri



    Polohovanie
    Pre každý ovládací prvok môžeme definovať vlastnosť Location, ktorá určuje súradnice ľavého horného rohu prvku vzhľadom na kontajner. Keď pretiahnete prvok z panela nástrojov do formulára, táto vlastnosť sa nastaví automaticky. Potom však v okne Vlastnosti môžeme manuálne opraviť súradnice polohy prvku:

    Môžeme tiež nastaviť pozíciu prvku v kóde:

    1
    2
    3
    4
    private void Form1_Load(odosielateľ objektu, EventArgs e)
    {
    button1.Location = new Point(50, 50);
    }
    Nastavenie rozmerov
    Pomocou vlastnosti Size môžete nastaviť rozmery prvku:

    Dodatočné vlastnosti MaximumSize a MinimumSize vám umožňujú obmedziť minimálnu a maximálnu veľkosť.

    Nastavenie vlastností v kóde:

    1
    2
    3
    4
    button1.Size = new Size ( Width = 50, Height = 25 );
    // individuálne nastavenie vlastností
    button1.Width = 100;
    button1.Height = 35;
    Vlastnosť kotvy
    Ďalšie možnosti umiestnenia prvkov je možné určiť definovaním vlastnosti Anchor. Táto vlastnosť definuje vzdialenosť medzi jednou zo strán prvku a stranou kontajnera. A ak ho pri práci s kontajnerom natiahneme, vnorený prvok sa natiahne spolu s ním.

    V predvolenom nastavení je táto vlastnosť pre každý pridaný prvok rovná Top, Left:

    To znamená, že ak natiahneme formulár doľava alebo nahor, prvok si zachová vzdialenosť od ľavej a hornej hranice prvku k hraniciam kontajnera, ako sa formulár správa.

    Pre túto vlastnosť môžeme nastaviť štyri možné hodnoty alebo ich kombináciu:

  11. Správny
  12. Ak napríklad zmeníme hodnotu tejto vlastnosti na opačnú - Dolu, Vpravo, potom budeme mať rovnakú vzdialenosť medzi pravou a spodnou stranou prvku a tvaru.

    Je potrebné poznamenať, že táto vlastnosť zohľadňuje vzdialenosť k hraniciam kontajnera, nie formu. To znamená, že ak máme na formulári prvok Panel a na Paneli je umiestnené tlačidlo, potom bude tlačidlo ovplyvnené zmenou hraníc Panela, nie formulára. V tomto prípade bude mať roztiahnutie formulára účinok iba vtedy, ak ovplyvní kontajner Panel.

    Ak chcete nastaviť túto vlastnosť v kóde, musíte použiť enumeráciu AnchorStyles:

    1
    2
    3
    button1.Anchor = AnchorStyles.Left;
    // nastavenie kombinácie hodnôt
    button1.Anchor = AnchorStyles.Left | AnchorStyles.Top;
    Dock majetok
    Vlastnosť Dock vám umožňuje ukotviť prvok na konkrétnu stranu kontajnera. V predvolenom nastavení je to Žiadne, ale tiež vám umožňuje nastaviť päť ďalších hodnôt:

  • Hore: Prvok je posunutý k hornému okraju kontajnera
  • Spodná časť: prvok je pritlačený k spodnému okraju nádoby
  • Vľavo: Prvok je posunutý na ľavú stranu kontajnera
  • Vpravo: Prvok je pripevnený k pravej strane kontajnera
  • Výplň: prvok vyplní celý priestor nádoby
  • https://metanit.com/sharp/windowsforms/3.5.php

    Panel kariet TabControl a SplitContainer



    TabControl

    Element TabControl vám umožňuje vytvoriť ovládací prvok s viacerými kartami. Každá karta bude obsahovať určitú skupinu ďalších ovládacích prvkov, ako sú tlačidlá, textové polia atď. Každá karta je reprezentovaná triedou TabPage.

    Ak chcete nakonfigurovať karty prvku TabControl, použite vlastnosť TabPages. Keď pretiahnete TabControl z panela nástrojov do formulára, predvolene sa vytvoria dve karty – tabPage1 a tabPage2. Zmeňme ich zobrazenie pomocou vlastnosti TabPages:

    Otvorí sa okno na úpravu/pridávanie a odstraňovanie kariet:

    Každá karta predstavuje akýsi panel, do ktorého môžeme pridať ďalšie ovládacie prvky, ako aj hlavičku, pomocou ktorej môžeme prepínať medzi kartami. Text nadpisu sa nastavuje pomocou vlastnosti Text.

    Správa kariet v kóde
    Ak chcete pridať novú kartu, musíme ju vytvoriť a pridať do kolekcie tabControl1.TabPages pomocou metódy Add:

    //pridanie karty
    TabPage newTabPage = new TabPage();
    newTabPage.Text = "Kontinenty";
    tabControl1.TabPages.Add(newTabPage);
    Odstránenie je rovnako jednoduché:

    // odstrániť kartu
    // podľa indexu
    tabControl1.TabPages.RemoveAt(0);
    // podľa objektu
    tabControl1.TabPages.Remove(newTabPage);
    Získaním požadovanej karty v kolekcii tabControl1.TabPages podľa indexu s ňou môžeme jednoducho manipulovať:

    // zmena vlastností
    tabControl1.TabPages.Text = "Prvá karta";
    SplitContainer
    Element SplitContainer umožňuje vytvoriť dva panely oddelené rozdeľovačom. Zmenou polohy rozdeľovača môžete zmeniť veľkosť týchto panelov.

    Pomocou vlastnosti Orientation môžete nastaviť horizontálne alebo vertikálne zobrazenie rozdeľovača na formulári. V tomto prípade táto vlastnosť nadobúda hodnoty Horizontálne a Vertikálne.

    V prípade, že potrebujete zakázať zmenu polohy rozdeľovača, môžete nastaviť vlastnosť IsSplitterFixed na true. Takto bude štiepačka pevná a nebudeme môcť zmeniť jej polohu.

    V predvolenom nastavení sa natiahnutím alebo zmenšením tvaru zmení aj veľkosť oboch panelov delenej nádoby. Jednému panelu však môžeme priradiť pevnú šírku (ak je rozdeľovač vertikálne orientovaný) alebo výšku (ak je rozdeľovač horizontálne orientovaný). Aby sme to dosiahli, musíme nastaviť vlastnosť FixedPanel prvku SplitContainer. Ako hodnotu berie panel, ktorý je potrebné opraviť:

    Ak chcete zmeniť polohu rozdeľovača v kóde, môžeme ovládať vlastnosť SplitterDistance, ktorá nastavuje polohu rozdeľovača v pixeloch od ľavého alebo horného okraja prvku SplitContainer. A pomocou vlastnosti SplitterIncrement môžete nastaviť krok, o ktorý sa rozdeľovač pohne, keď ho posuniete pomocou šípok.

    Ak chcete skryť jeden z dvoch panelov, môžeme nastaviť vlastnosť Panel1Collapsed alebo Panel2Collapsed na hodnotu true

  • https://metanit.com/sharp/windowsforms/4.1.php

    Ovládacie prvky

    Ovládacie prvky sú vizuálne triedy, ktoré prijímajú vstup od používateľa a môžu spúšťať rôzne udalosti. Všetky ovládacie prvky dedia z triedy Control, a preto majú niekoľko spoločných vlastností:

    • Kotva: Určuje, ako sa prvok roztiahne
    • BackColor: Definuje farbu pozadia prvku
    • BackgroundImage: Definuje obrázok na pozadí prvku
    • ContextMenu: Kontextové menu, ktoré sa otvorí po kliknutí pravým tlačidlom myši na prvok. Nastavte pomocou prvku ContextMenu
    • Kurzor: Predstavuje, ako sa zobrazí kurzor myši pri umiestnení kurzora myši nad prvok
    • Dock: Nastavuje umiestnenie prvku vo formulári
    • Povolené: Určuje, či bude prvok dostupný na použitie. Ak je táto vlastnosť False, prvok je zablokovaný.
    • Písmo: Nastavuje písmo textu pre prvok
    • ForeColor: Určuje farbu písma
    • Umiestnenie: Určuje súradnice ľavého horného rohu ovládacieho prvku
    • Názov: Názov ovládacieho prvku
    • Veľkosť: Definuje veľkosť prvku
    • Šírka: šírka prvku
    • Výška: výška prvku
    • TabIndex: Určuje poradie, v ktorom sa prvok prechádza pri stlačení klávesu Tab
    • Tag: Umožňuje vám uložiť hodnotu spojenú s týmto ovládacím prvkom
    Tlačidlo
    Najčastejšie používaným ovládacím prvkom je tlačidlo. Spracovaním udalosti kliknutia na tlačidlo môžeme vykonať určité akcie.

    Keď klikneme na tlačidlo vo formulári v editore Visual Studio, štandardne sa dostaneme do kódu obsluhy udalosti Click, ktorý sa spustí po kliknutí:

    Private void button1_Click(odosielateľ objektu, EventArgs e)
    {
    MessageBox.Show("Ahoj svet");
    }
    Dizajn gombíkov
    Na ovládanie externého zobrazenia tlačidla môžete použiť vlastnosť FlatStyle. Môže nadobudnúť nasledujúce hodnoty:

    • Ploché – tlačidlo má plochý vzhľad
    • Vyskakovacie okno – tlačidlo nadobudne trojrozmerný vzhľad, keď naň umiestnite kurzor, inak má plochý vzhľad
    • Štandardné – tlačidlo má trojrozmerný vzhľad (predvolene sa používa)
    • Systém – Vzhľad tlačidla závisí od operačného systému
    Obrázok tlačidla
    Rovnako ako pri mnohých ovládacích prvkoch môžete pre tlačidlo nastaviť obrázok pomocou vlastnosti BackgroundImage. Ovládať však môžeme aj umiestnenie textu a obrázkov na tlačidlách. Ak to chcete urobiť, musíte použiť vlastnosť TextImageRelation. Preberá tieto významy:
    • Prekrytie: text sa prekryje na obrázku
    • ImageAboveText: obrázok je umiestnený nad textom
    • TextAboveImage: text je umiestnený nad obrázkom
    • ImageBeforeText: obrázok sa umiestni pred text
    • TextBeforeImage: text sa umiestni pred obrázok
    Nastavme napríklad obrázok pre tlačidlo. Ak to chcete urobiť, vyberte tlačidlo a v okne Vlastnosti kliknite na pole Obrázok (nemýliť si s BackgroundImage). Otvorí sa dialógové okno Nastaviť obrázky:

    V tomto okne vyberieme možnosť Lokálny zdroj a klikneme na tlačidlo Importovať, po ktorom sa nám otvorí dialógové okno na výber súboru s obrázkom.

    Po výbere obrázka môžeme nastaviť vlastnosť ImageAlign, ktorá riadi umiestnenie obrázka na tlačidle:

    K dispozícii máme 9 možností, pomocou ktorých môžeme pripevniť obrázok na konkrétnu stranu tlačidla. Nechajme tu predvolenú hodnotu – MiddleCenter, teda umiestnenie v strede.

    Ďalej prejdeme na vlastnosť TextImageRelation a nastavíme ju na ImageBeforeText. V dôsledku toho dostaneme tlačidlo, na ktorom je hneď za obrázkom nápis:

    Klávesové skratky
    Pri práci s formulármi pomocou klávesnice je veľmi vhodné používať klávesové skratky. Keď na klávesnici stlačíte kombináciu klávesov At+nejaký symbol, zavolá sa konkrétne tlačidlo. Napríklad nastavme vlastnosť Text tlačidla na &Avatar. Prvý znak – ampersand – určuje písmeno, ktoré bude podčiarknuté. V tomto prípade bude nápis vyzerať ako Avatar. A teraz na spustenie udalosti Click stačí stlačiť kombináciu kláves Alt+A.

    Predvolené tlačidlá
    Formulár, ktorý obsahuje všetky ovládacie prvky, má vlastnosti, ktoré vám umožňujú priradiť predvolené tlačidlo a tlačidlo zrušenia.

    Vlastnosť formulára AcceptButton vám teda umožňuje priradiť predvolené tlačidlo, ktoré sa spustí po stlačení klávesu Enter.

    Podobne funguje vlastnosť formulára CancelButton, ktorá priraďuje tlačidlo zrušenia. Po priradení takéhoto tlačidla môžeme spôsobiť jeho stlačenie stlačením klávesu Esc.

  • https://metanit.com/sharp/windowsforms/4.2.php

    Označenie
    Ak chcete vo formulári zobraziť obyčajný text len ​​na čítanie, použite prvok Label. Ak chcete nastaviť zobrazovaný text štítku, musíte nastaviť vlastnosť Text prvku.

    LinkLabel
    Špeciálnym typom štítkov sú prvky LinkLabel, ktoré sú určené na zobrazovanie odkazov, ktoré sú podobné odkazom umiestneným na štandardných webových stránkach.

    • Vlastnosť ActiveLinkColor nastavuje farbu odkazu po kliknutí
    • Vlastnosť LinkColor nastavuje farbu odkazu pred kliknutím, na ktorý sa ešte nekliklo
    • Vlastnosť VisitedLinkColor určuje farbu odkazu, na ktorý sa už kliklo
    Okrem farby odkazu pre tento prvok môžeme nastaviť vlastnosť LinkBehavior, ktorá riadi správanie odkazu. Táto vlastnosť má štyri možné hodnoty:
    • SystemDefault: Odkaz je nastavený na systémové nastavenia
    • AlwaysUnderline: odkaz je vždy podčiarknutý
    • HoverPodčiarknutie: odkaz sa podčiarkne iba vtedy, keď naň umiestnite kurzor myši
    • NeverUnderline: Odkaz nie je nikdy podčiarknutý
    V predvolenom nastavení sa všetok text na danom prvku považuje za odkaz. Pomocou vlastnosti LinkArea však môžeme zmeniť oblasť odkazu. Nechceme napríklad zahrnúť prvých šesť znakov do odkazu. Ak to chcete urobiť, nastavte podvlastnosť Štart:

    Ak chcete prejsť na odkaz kliknutím naň, musíte dodatočne napísať kód. Tento kód by mal spracovať udalosť LinkClicked, ktorú má prvok LinkLabel. Povedzme napríklad, že vo formulári máme prvok odkazu s názvom linkLabel1 a ktorý obsahuje nejaký odkaz:

    Verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    // nastavenie obsluhy udalosti
    linkLabel1.LinkClicked += linkLabel1_LinkClicked;
    }

    Súkromné ​​void linkLabel1_LinkClicked(odosielateľ objektu, LinkLabelLinkClickedEventArgs e)
    {
    System.Diagnostics.Process.Start("http://metanit.com ");
    }
    }
    Metóda System.Diagnostics.Process.Start() otvorí tento odkaz vo webovom prehliadači, ktorý je nainštalovaný ako predvolený prehliadač v systéme.

  • https://metanit.com/sharp/windowsforms/4.3.php

    Textové pole

    Textové polia - prvok TextBox - slúžia na zadávanie a úpravu textu. Rovnako ako prvok Label, aj text prvku TextBox možno nastaviť alebo získať pomocou vlastnosti Text.

    V predvolenom nastavení sa pri pretiahnutí položky z panela s nástrojmi vytvorí jednoriadkové textové pole. Ak chcete zobraziť veľké množstvo informácií v textovom poli, musíte použiť jeho vlastnosti Multiline a ScrollBars. Nastavením vlastnosti Viacriadok na hodnotu true sa všetky nadbytočné znaky, ktoré presahujú hranice poľa, zabalia do nového riadku.

    Okrem toho môžete posúvať textové pole nastavením vlastnosti ScrollBars na jednu z nasledujúcich hodnôt:

    • Žiadne: žiadne posúvanie (predvolené)
    • Horizontálne: Vytvára horizontálne rolovanie, keď dĺžka riadku presahuje šírku textového poľa
    • Vertikálne: Ak sa riadky nezmestia do textového poľa, vytvorí sa zvislé posúvanie
    • Both: Vytvára vertikálne a horizontálne rolovanie

    Automatické dopĺňanie textového poľa
    Element TextBox má dostatočné možnosti na vytvorenie poľa automatického dopĺňania. Aby sme to dosiahli, musíme vlastnosť viazať AutoCompleteCustomSource element TextBox do nejakej kolekcie, z ktorej sa preberajú údaje na vyplnenie poľa.

    Pridajme teda do formulára textové pole a do kódu udalosti načítania napíšme nasledujúce riadky:

    Verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();
    Zdroj AutoCompleteStringCollection = nový AutoCompleteStringCollection()
    {
    "Kuznetsov",
    "Ivanov",
    "Petrov",
    "Kustov"
    };
    textBox1.AutoCompleteCustomSource = zdroj;
    textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
    }
    }

    Režim automatického dokončovania, ktorý predstavuje vlastnosť AutoCompleteMode, má niekoľko možných hodnôt:

    • Žiadne: žiadne automatické dopĺňanie
    • Navrhnúť: Navrhne vstup, ale nič nedokončí
    • Pripojiť: Pripojí zadanú hodnotu k riadku zo zoznamu, ale neponúka možnosti výberu
    • SuggestAppend: obe možnosti navrhnú pre automatické dopĺňanie a pridajú hodnotu zadanú používateľom
    Zalamovanie slov
    Aby bol text v elemente TextBox zalomený do slov, musíte nastaviť vlastnosť WordWrap rovná sa pravda. To znamená, že ak sa jedno slovo nezmestí na riadok, prenesie sa na ďalšie. Táto vlastnosť bude fungovať len pre viacriadkové textové polia.

    Zadanie hesla
    Tento prvok má tiež vlastnosti, ktoré vám umožňujú zmeniť ho na pole na zadanie hesla. Na to musíte použiť PasswordChar a UseSystemPasswordChar.

    Vlastnosť PasswordChar nemá štandardne žiadnu hodnotu, ak ju nastavíme na ľubovoľný znak, potom sa tento znak zobrazí pri zadaní akýchkoľvek znakov do textového poľa.

    Vlastnosť UseSystemPasswordChar má podobný účinok. Ak jeho hodnotu nastavíme na true, tak sa namiesto zadaných znakov v textovom poli zobrazí symbol hesla akceptovaný v systéme, napríklad bodka.

    Udalosť TextChanged
    Zo všetkých udalostí elementu TextBox stojí za zmienku udalosť TextChanged, ktorá sa spúšťa pri zmene textu v elemente. Umiestnite napríklad štítok na formulár okrem textového poľa a uistite sa, že keď sa zmení text v textovom poli, zmení sa aj text na štítku:

    Verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();

    TextBox1.TextChanged += textBox1_TextChanged;
    }

    Súkromné ​​void textBox1_TextChanged(odosielateľ objektu, EventArgs e)
    {
    label1.Text = textBox1.Text;
    }
    }

  • https://metanit.com/sharp/windowsforms/4.4.php

    Prvok MaskedTextBox

    Element MaskedTextBox je v podstate bežné textové pole. Tento prvok vám však umožňuje sledovať vstup používateľa a automaticky ho kontrolovať, či neobsahuje chyby.

    Na ovládanie znakov zadávaných do poľa je potrebné nastaviť masku. Na určenie masky je možné použiť nasledujúce symboly:

    • 0: Umožňuje zadávať iba čísla
    • 9: Umožňuje zadávať čísla a medzery
    • #: Umožňuje zadávať čísla, medzery a znaky „+“ a „-“.
    • L: Umožňuje zadávať iba abecedné znaky
    • ?: Umožňuje zadať ďalšie voliteľné abecedné znaky
    • A: Umožňuje zadávať alfanumerické znaky
    • .: Určuje polohu oddeľovača desatinných miest
    • ,: Používa sa na oddelenie číslic v celočíselnej časti čísla
    • :: Používa sa v časových intervaloch - oddeľuje hodiny, minúty a sekundy
    • /: Používa sa na oddelenie dátumov
    • $: Používa sa ako symbol meny
    Ak chcete nastaviť masku, musíte nastaviť vlastnosť masky prvku. Po nájdení tejto vlastnosti v okne vlastností (Portality), kliknite na ňu a zobrazí sa nám okno, v ktorom môžeme zadať jednu zo štandardných šablón masky. Konkrétne môžeme vybrať Telefónne číslo, čo znamená, že do textového poľa zadáte iba telefónne číslo:

    Teraz pri spustení môžeme do textového poľa zadávať iba čísla, výsledkom čoho je telefónne číslo.

    Teraz si vyrobme vlastnú masku. Vytvorme si napríklad masku na zadávanie prvých a stredných iniciálok a priezvisk obmedzenej dĺžky do textového poľa. Ak to chcete urobiť, nastavte vlastnosť Maska na L.L.L?????????. Potom bude vstup do textového poľa vyzerať takto:

    Tento prvok nám tiež predstavuje množstvo vlastností, ktoré je možné použiť na ovládanie vstupu. Ak je teda vlastnosť BeepOnError nastavená na hodnotu true, pri zadaní nesprávneho znaku sa ozve pípnutie.

    Vlastnosť HidePromptOnLeave, keď je nastavená na hodnotu true, skryje tie, ktoré sú špecifikované v PromptChar, keď textové pole stratí zameranie

    Vlastnosť PromptChar ukazuje na znak, ktorý je zobrazený v poli, do ktorého sa zadávajú znaky. Predvolená hodnota je podčiarknutie.

    Vlastnosť AsciiOnly, keď je nastavená na hodnotu true, umožňuje zadávať iba znaky asci, teda znaky z rozsahu A-Z a a-z.

  • https://metanit.com/sharp/windowsforms/4.5.php

    Prvky Radiobutton a CheckBox

    CheckBox
    Element alebo začiarkavacie políčko CheckBox je určené na nastavenie jednej z dvoch hodnôt: začiarknuté alebo nezačiarknuté. Ak chcete začiarknuť políčko, musíte nastaviť jeho vlastnosť Checked na hodnotu true.

    Okrem vlastnosti Checked má prvok CheckBox vlastnosť CheckState, ktorá umožňuje nastaviť checkbox na jeden z troch stavov - Checked, Indeterminate (zaškrtávacie políčko nie je definované - začiarknuté, ale v neaktívnom stave) a Unchecked.

    Za zmienku stojí aj vlastnosť AutoCheck – ak je nepravda, tak nemôžeme zmeniť stav checkboxu. V predvolenom nastavení je nastavená na hodnotu true.

    Keď sa zmení stav začiarkavacieho políčka, vygeneruje sa udalosť CheckedChanged. Spracovaním tejto udalosti môžeme prijať zmenený príznak a vykonať určité akcie:

    Private void checkBox_CheckedChanged(odosielateľ objektu, EventArgs e)
    {
    CheckBox checkBox = (CheckBox)odosielateľ; // prevod odosielateľa na prvok typu CheckBox
    if (checkBox.Checked == true)
    {
    MessageBox.Show("Zaškrtávacie políčko " + checkBox.Text + " je teraz začiarknuté");
    }
    inak
    {
    MessageBox.Show("Zaškrtávacie políčko " + checkBox.Text + " je teraz nezačiarknuté");
    }
    }
    Tlačítko na Rádiu
    Prvok CheckBox je podobný ako RadioButton alebo prepínač. Vypínače sú usporiadané do skupín a zapnutie jedného vypínača znamená vypnutie všetkých ostatných.

    Ak chcete nastaviť prepínač do zapnutého stavu, musíte nastaviť jeho vlastnosť Checked na hodnotu true.

    Ak chcete vytvoriť skupinu prepínačov, z ktorých si môžete vyberať, musíte do nejakého kontajnera umiestniť niekoľko prepínačov, napríklad do GroupBox alebo Panel prvkov. Prepínače. umiestnené v rôznych kontajneroch budú patriť do rôznych skupín:

    Podobným spôsobom môžeme zachytiť prepínanie prepínačov v skupine spracovaním udalosti CheckedChanged. Priradením každého prepínača v skupine k jednému obslužnému programu pre túto udalosť môžeme získať prepínač, ktorý je aktuálne vybratý:

    Private void radioButton_CheckedChanged(odosielateľ objektu, EventArgs e)
    {
    // prenesie odosielateľa na prvok typu RadioButton
    RadioButton radioButton = (RadioButton)odosielateľ;
    if (radioButton.Checked)
    {
    MessageBox.Show("Vybrali ste " + radioButton.Text);
    }
    }

  • https://metanit.com/sharp/windowsforms/4.6.php

    ListBox

    Element ListBox je jednoduchý zoznam. Kľúčovou vlastnosťou tohto prvku je vlastnosť Items, ktorá uchováva množinu všetkých prvkov zoznamu.

    Prvky môžu byť pridané do zoznamu buď počas vývoja alebo programovo. Vo Visual Studiu v okne Properties pre element ListBox nájdeme vlastnosť Items. Po dvojitom kliknutí na vlastnosť sa zobrazí okno na pridanie prvkov do zoznamu:

    Do prázdneho poľa zadáme jeden prvok zoznamu – jeden na každý riadok. Potom budú všetky prvky, ktoré sme pridali, v zozname a budeme ich môcť spravovať:

    Programová správa položiek v zozname
    Pridávanie prvkov
    Takže všetky položky zoznamu sú zahrnuté vo vlastnosti Items, čo je kolekcia. Na pridanie nového prvku do tejto kolekcie, a teda do zoznamu, je potrebné použiť metódu Add, napríklad: listBox1.Items.Add("Nový prvok");. Pri použití tejto metódy sa každý pridaný prvok pridá na koniec zoznamu.

    Môžete pridať niekoľko prvkov naraz, napríklad pole. Ak to chcete urobiť, použite metódu AddRange:

    Krajiny reťazca = ("Brazília", "Argentína", "Čile", "Uruguaj", "Kolumbia");
    listBox1.Items.AddRange(krajiny);
    Vkladanie prvkov
    Na rozdiel od jednoduchého pripájania sa vkladanie vykonáva do špecifického indexu zoznamu pomocou metódy Insert:

    ListBox1.Items.Insert(1, "Paraguaj");
    V tomto prípade prvok vložíme na druhú pozíciu v zozname, keďže počítanie pozícií začína od nuly.

    Odstraňovanie položiek
    Ak chcete odstrániť prvok podľa jeho textu, použite metódu Odstrániť:

    ListBox1.Items.Remove("Čile");
    Ak chcete odstrániť prvok podľa jeho indexu v zozname, použite metódu RemoveAt:

    ListBox1.Items.RemoveAt(1);
    Môžete tiež vymazať celý zoznam naraz pomocou metódy Clear:

    ListBox1.Items.Clear();
    Prístup k položkám zoznamu
    Pomocou indexu prvku môžete nájsť samotný prvok v zozname. Zoberme si napríklad prvý prvok zoznamu:

    String firstElement = listBox1.Items;
    Metóda Count vám umožňuje určiť počet prvkov v zozname:

    Int cislo = listBox1.Items.Count();
    Výber položiek zoznamu
    Pri výbere prvkov zoznamu ich môžeme spravovať ako cez index, tak aj cez samotný vybraný prvok. Vybrané položky môžete získať pomocou nasledujúcich vlastností prvku ListBox:

    • SelectedIndex: Vráti alebo nastaví číslo vybratej položky zoznamu. Ak nie sú vybraté žiadne prvky, vlastnosť má hodnotu -1
    • SelectedIndices: Vráti alebo nastaví kolekciu vybraných prvkov ako množinu ich indexov
    • Vybraná položka: vráti alebo nastaví text vybratého prvku
    • SelectedItems: Vráti alebo nastaví vybraté položky ako kolekciu
    V predvolenom nastavení zoznam podporuje výber jednej položky. Ak chcete pridať možnosť výberu viacerých prvkov, musíte nastaviť jeho vlastnosť SelectionMode na MultiSimple.

    Na programový výber prvku je potrebné použiť metódu SetSelected(int index, bool value), kde index je číslo vybraného prvku. Ak je druhý parameter - hodnota pravdivý, potom je vybraný prvok na zadanom indexe; ak je nepravda, výber je skrytý:

    ListBox1.SetSelected(2, true); // vyberie sa tretí prvok
    Ak chcete vymazať všetky vybraté prvky, použite metódu ClearSelected.

    Udalosť SelectedIndexChanged
    Zo všetkých udalostí prvku ListBox by sme si mali najskôr všimnúť udalosť SelectedIndexChanged, ktorá nastane, keď sa vybraný prvok zmení:

    Verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();

    Krajiny reťazca = ("Brazília", "Argentína", "Čile", "Uruguaj", "Kolumbia");
    listBox1.Items.AddRange(krajiny);
    listBox1.SelectedIndexChanged += listBox1_SelectedIndexZmenené;
    }

    Void listBox1_SelectedIndexChanged(odosielateľ objektu, EventArgs e)
    {
    string selectedCountry = listBox1.SelectedItem.ToString();
    MessageBox.Show(selectedCountry);
    }
    }
    V tomto prípade sa po výbere položky zoznamu zobrazí hlásenie s vybratou položkou.

    comboBox1.Items.AddRange(nový reťazec ( "Uruguaj", "Ekvádor" ));
    // pridanie jedného prvku na konkrétnu pozíciu
    comboBox1.Items.Insert(1, "Bolívia");
    Pri pridávaní pomocou metód Add / AddRange sa všetky nové prvky umiestnia na koniec zoznamu. Ak však nastavíme vlastnosť Sorted ComboBoxu na hodnotu true, potom sa po pridaní automaticky zoradí.

    Odstraňovanie položiek:

    // odstránenie jedného prvku
    comboBox1.Items.Remove("Argentína");
    // odstránenie prvku po indexe
    comboBox1.Items.RemoveAt(1);
    // odstráňte všetky prvky
    comboBox1.Items.Clear();
    Prvok môžeme získať indexom a vykonávať s ním rôzne akcie. Zmeňte ho napríklad:

    ComboBox1.Items = "Paraguaj";
    Prispôsobenie dizajnu ComboBoxu
    Pomocou množstva vlastností môžete prispôsobiť štýl dizajnu komponentu. Vlastnosť DropDownWidth teda určuje šírku rozbaľovacieho zoznamu. Pomocou vlastnosti DropDownHeight môžete nastaviť výšku rozbaľovacieho zoznamu.

    Ďalšia vlastnosť MaxDropDownItems umožňuje nastaviť počet viditeľných položiek zoznamu – od 1 do 100. Štandardne je tento počet 8.

    Ďalšia vlastnosť, DropDownStyle, špecifikuje štýl ComboBoxu. Môže nadobudnúť tri možné hodnoty:

    • Rozbaľovacia ponuka: Toto je predvolené nastavenie. Rozbaľovací zoznam možností otvoríme zadaním hodnoty do textového poľa alebo kliknutím na tlačidlo so šípkou na pravej strane prvku a zobrazí sa nám aktuálny rozbaľovací zoznam, z ktorého môžeme vybrať možná možnosť
    • DropdownList: Ak chcete otvoriť rozbaľovací zoznam, kliknite na tlačidlo so šípkou na pravej strane prvku
    • Jednoduché: ComboBox predstavuje jednoduché textové pole, v ktorom môžeme pomocou kláves hore/dole prechádzať medzi prvkami

    Udalosť SelectedIndexChanged
    Najdôležitejšou udalosťou pre ComboBox je tiež udalosť SelectedIndexChanged, ktorá vám umožňuje sledovať výber položky v zozname:

    Verejná čiastková trieda Formulár1: Formulár
    {
    verejný formulár1()
    {
    InitializeComponent();

    ComboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
    }

    Void comboBox1_SelectedIndexChanged(odosielateľ objektu, EventArgs e)
    {
    string selectedState = comboBox1.SelectedItem.ToString();
    MessageBox.Show(selectedState);
    }
    }
    Aj tu sa vlastnosť SelectedItem bude vzťahovať na vybratú položku.

  • Ak chcete písať programy podobné známym aplikáciám Windows, pravdepodobne použijete triedy z menného priestoru System.Windows.Forms. Umožňujú vám používať tlačidlá, zoznamy, textové polia, ponuky, správy a mnoho ďalších „ovládacích prvkov“. Ovládacie prvky sú to, čo vložíte do formulára. Sú potrebné na zobrazenie informácií, ako je text (ovládací prvok Label) alebo grafika (ovládací prvok PictureBox), alebo na vykonávanie určitých akcií, ako je výber hodnoty alebo prechod do iného formulára po kliknutí na tlačidlo. Všetky ovládacie prvky sú umiestnené na formulári.

    Pojem „formulár“ prijatý v programovaní je podobný pojmu „dotazníkový formulár“ alebo „forma dokumentu“ z každodenného života. Na formulári môžete usporiadať rôzne prvky v určitom poradí (text, obrázky, polia na vyplnenie atď.). Keď nám dajú hotové tlačivo dokladu a vypýtajú si ho vyplniť, my zvyčajne čítame typické informácie, ktoré obsahuje, a potom zadajte chýbajúce údaje určité riadky.

    V programovaní je koncept formulára veľmi podobný: formulár umožňuje umiestniť text, obrázky, vstupné polia, tlačidlá atď., čím sa dosiahne ich presné umiestnenie na obrazovke. IN konzolová aplikácia Na obrazovke sa zobrazujú iba riadky textu.

    Spoločnosť Microsoft poskytla obrovské množstvo „ovládacích prvkov“ ako súčasť knižnice tried .NET Framework, ktoré môžete umiestniť na formuláre. Keď si osvojíte tento nástroj, budete môcť rýchlo vytvárať pútavé aplikácie.

    Niektoré užitočné triedy z menného priestoru System.Windows.Forms

    Tu je niekoľko ovládacích prvkov, ktoré môžete umiestniť do formulárov:

    • Označenie.
    • Tlačidlo.
    • ListBox (Zoznam).
    • CheckBox.
    • RadioButton (prepínač).
    • MessageBox.
    • Ponuka.
    • TabControl (Ovládanie Tab).
    • Panel s nástrojmi.
    • TreeView (Strom).
    • DataGrid.
    • PictureBox (obrázok).
    • RichTextBox (textové pole s podporou formátu RTF).

    Práca so vzorovými programami Windows Forms vo Visual C# Express

    Možno radšej nepoužijete už pripravené vzorové projekty, ale rozvíjať ich od začiatku. V tomto prípade musíte vziať do úvahy, že pre každý projekt C# Express okamžite vytvorí dva súbory (tzv Form1.cs A Program.cs) a naplní ich zdrojovým kódom v C#, to znamená, že na začiatku získate jednoduchý, ale plnohodnotný program. Nami navrhovaná metóda práce s už prijatým projektom pozostáva z vykonania nasledujúcich akcií:

    • Odstráňte súbor Form1.cs.
    • Nahraďte kód v súbore Program.cs vzorovým kódom, s ktorým pracujete.

    Oba tieto kroky nie sú potrebné, ak programy otvoríte pomocou príkazu „Otvoriť projekt“ v ponuke „Súbor“ a po rozbalení nájdete požadovaný projekt v priečinku, do ktorého ste ho umiestnili.

    Príklad programu 3.3

    Pozrime sa na príklad jednoduchej aplikácie Windows Forms. Len vytvorí nový formulár a zobrazí nejaký text v záhlaví okna formulára.

    Pomocou System.Windows.Forms; class SimpleWindowsForm: Form ( // Metóda konštruktora našej triedy public SimpleWindowsForm() ( // Zadajte nadpis okna this.Text = "Toto je jednoduchý formulár s nadpisom"; ) static void Main() ( // Vytvoriť nový inštancia triedy //a spustite ju na vykonanie // V dôsledku toho sa na obrazovke otvorí formulár Application.Run(new SimpleWindowsForm()); ) ) Výpis 3.3.


    Príklad programu 3.4

    Ďalší príklad je tiež celkom jednoduchý, ale urobíme krok vpred - umiestnime tlačidlo na formulár.

    Pomocou System.Windows.Forms; class SimpleWindowsFormWithButton: Form ( Button button1; // Metóda konštruktora našej triedy public SimpleWindowsFormWithButton() ( // Zadajte názov okna this.Text = "Formulár s príkazovým tlačidlom"; // Pridanie tlačidla do kolekcie ovládacích prvkov formulára / / Hoci na tlačidle je napísané: "Stlačte ma!", // po stlačení sa nič nestane! button1 = new Button(); button1.Text = "Stlačte ma!"; button1.Top = 100; button1.Left = 100; button1.Height = 50; button1.Width = 70; this.Controls.Add(button1); ) static void Main() ( // Vytvorenie a spustenie formulára Application.Run(new SimpleWindowsFormWithButton()); ) ) Výpis 3.4.


    Príklad programu 3.5

    Na formulár sme umiestnili tlačidlo, no keď naň klikneme, nič sa nedeje. Je to nuda.

    Musíme opísať metódu, ktorá vykoná nejakú akciu po kliknutí na tlačidlo. Nechajte zmeniť text v nadpise okna. Pretože táto metóda detekuje výskyt nejakej udalosti (v našom prípade kliknutie na tlačidlo) a následne ju nejakým spôsobom spracuje, nazýva sa „obslužný program udalosti“. Okrem toho musíte naviazať obsluhu udalosti na zodpovedajúcu udalosť, teda na stlačenie tlačidla.

    Používanie systému; pomocou System.Windows.Forms; pomocou System.Drawing; class FormWithWorkingButton: Form ( Button mrButton; // Metóda konštruktora našej triedy public FormWithWorkingButton() ( // Zadajte názov okna this.Text = "Formulár s pracovným tlačidlom!"; // Pridajte tlačidlo a naviažte ho na udalosť handler mrButton = new Button(); mrButton.Text = "Klikni na mňa"; mrButton.Top = 100; mrButton.Left = 100; mrButton.Height = 50; mrButton.Width = 70; mrButton.Click H= new System.Event (mrButton_Click); this.Controls.Add(mrButton); ) static void Main() ( // Vytvorenie a spustenie formulára Application.Run(new FormWithWorkingButton()); ) // Obslužný program udalosti, ktorý sa spustí po kliknutí na tlačidlo void mrButton_Click(object sender, EventArgs e ) ( // Zmena textu mrButton.Text = "Tlačidlo bolo stlačené!"; ) ) Výpis 3.5.


    Príklad programu 3.6

    Dosiahli sme úspech: náš program dokáže vykonávať základné akcie. Teraz do formulára pridáme pár nových ovládacích prvkov, opatrne ich rozmiestnime a trochu s nimi popracujeme. Zoberme si 4 typy ovládacích prvkov: Button, ListBox, MessageBox a PictureBox.

    Všimnite si, že okrem System.Windows.Forms sa v tomto príklade spomína aj priestor názvov System.Drawing. Ide o to, že používame ovládací prvok PictureBox a práca s obrázkami vyžaduje triedy kreslenia.

    Pomocou System.Windows.Forms; pomocou System.Drawing; class MyForm: Form ( // Deklarujme prvok ListBox ako pole triedy: // budeme k nemu musieť pristupovať z rôznych metód ListBox listBox1; // Metóda konštruktora našej triedy public MyForm() ( //Formulárne veľkosti this.Size = new Size( 400, 400); // Vytvorte prvok PictureBox, umiestnite doň obrázok, // pridajte ho do formulára PictureBox pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; Bitmap image1 = new Bitmap ("..//. .//images//Zakat.jpg"); pictureBox1.ClientSize = new Size(this.Width, 150); pictureBox1.Image = (Image)image1; this.Controls.Add(pictureBox1) ; // Vytvorte objekt Button, definujte niektoré jeho vlastnosti Button button1 = new System.Windows.Forms.Button(); button1.Location = new Point(150, 160); button1.Size = new Size(100, 30) ; button1.Text = "Stlačte ma "; button1.Click += new System.EventHandler(button1_Click); this.Controls.Add(button1); // Vytvorte ListBox, definujte vlastnosti a pridajte ho do formulára listBox1 = new System. Windows.Forms.ListBox(); listBox1.Location = new System.Drawing.Point(20, 200); listBox1.Size = new Size(100, 100); listBox1.Items.Add("Les"); listBox1.Items.Add("Steppe"); listBox1.Items.Add("Jazero"); listBox1.Items.Add("More"); listBox1.Items.Add("Ocean"); listBox1.SelectedIndex = 2; this.Controls.Add(listBox1); ) // Obsluha udalosti, ktorá sa spustí po kliknutí na tlačidlo void button1_Click(object sender, System.EventArgs e) ( // Zobrazí správu označujúcu položku vybratú v zozname MessageBox.Show(this, "Vybrali ste " + listBox1 .SelectedItem, "Notification" , MessageBoxButtons.OK); ) static void Main() ( // Vytvorte a spustite formulár Application.Run(new MyForm()); ) private void InitializeComponent() ( this.SuspendLayout(); / / // MyForm // this .BackColor = System.Drawing.SystemColors.Control; this.ClientSize = new System.Drawing.Size(292, 273); this.Name = "MyForm"; this.ResumeLayout(false); ) ) Zoznam 3.6.

    Dobrý deň!
    Model-View-Presenter je pomerne známy dizajnový vzor. Na prvý pohľad všetko vyzerá jednoducho: existuje Model, ktorý obsahuje celú obchodnú logiku obrazovky; View/View, ktorý vie, ako zobraziť určité údaje; Prezentátor, ktorý je spojovacím článkom, reaguje na akcie používateľa v zobrazení, zmenu modelu a naopak.
    Zložitosť začína, keď sa počet formulárov v projekte stane viac ako jedným.
    Tento článok zahŕňa:
    - trochu teórie;
    - všeobecné problémy implementácie MVP (konkrétne Passive View) pod Windows Forms;
    - vlastnosti implementácie prechodov medzi formulármi a prenos parametrov, modálne okná;
    - použitie kontajnera IoC a šablóny Dependency Injection - DI (menovite Constructor Injection);
    - niektoré funkcie testovania aplikácie MVP (pomocou NUnit a NSubstitute);
    - to všetko sa stane na príklade miniprojektu a pokúsime sa to objasniť.
    Článok sa dotýka:
    - aplikácia šablóny adaptéra;
    - jednoduchá implementácia vzoru Application Controller.
    Pre koho je tento článok určený?
    Hlavne pre nových vývojárov Windows Forms, ktorí o tom počuli, ale neskúšali to, alebo to skúšali, ale nefungovalo to. Aj keď som si istý, že niektoré techniky sú použiteľné pre WPF a dokonca aj pre vývoj webových aplikácií.

    Formulácia problému

    Poďme si vymyslieť jednoduchú úlohu – implementujte 3 obrazovky:
    1) autorizačná obrazovka;
    2) hlavná obrazovka;
    3) modálna obrazovka na zmenu používateľského mena.
    Malo by to vyzerať asi takto:

    Trochu teórie

    MVP, rovnako ako jeho materská spoločnosť, MVC (Model-View-Controller), bol vynájdený pre pohodlie oddelenia obchodnej logiky od spôsobu, akým sa zobrazuje.

    Na internete nájdete množstvo implementácií MVP. Na základe spôsobu doručovania údajov do zobrazenia ich možno rozdeliť do 3 kategórií:
    - Passive View: View obsahuje minimálnu logiku pre zobrazovanie primitívnych dát (reťazcov, čísel), zvyšok má na starosti Presenter;
    - Prezentačný model: do zobrazenia je možné preniesť nielen primitívne údaje, ale aj obchodné objekty;
    - Kontrolný kontrolór: View vie o prítomnosti modelu a sám z neho berie údaje.

    Ďalej sa bude uvažovať o úprave pasívneho zobrazenia. Poďme si popísať hlavné vlastnosti:
    - View interface (IView), ktorý poskytuje zmluvu o zobrazovaní údajov;
    - Pohľad je špecifická implementácia IView, ktorá sa môže zobraziť v špecifickom rozhraní (či už Windows Forms, WPF alebo dokonca konzola) a nevie nič o tom, kto ho ovláda. V našom prípade sú to formy;
    - Model - poskytuje určitú obchodnú logiku (príklady: prístup k databáze, úložiská, služby). Môže byť reprezentovaný ako trieda alebo, opäť, rozhranie a implementácia;
    - Zástupca obsahuje odkaz na Pohľad cez rozhranie (IView), spravuje ho, prihlasuje jeho udalosti a vykonáva jednoduchú validáciu (kontrolu) zadaných údajov; obsahuje aj odkaz na model alebo jeho rozhranie, odovzdávanie údajov z Pohľadu do neho a požadovanie aktualizácií.

    Typická reprezentatívna implementácia

    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 UpdateUserInfo( ) ( var user = _service.GetUser(_view.UserId); _view.Username = user.Username; _view.Age = user.Age; ) )


    Aké výhody nám dáva spojka nízkej triedy (použitie rozhraní, udalostí)?
    1. Umožňuje relatívne voľne meniť logiku ľubovoľného komponentu bez porušenia zvyšku.
    2. Skvelé príležitosti na testovanie jednotiek. Fanúšikovia TDD by mali byť nadšení.
    Poďme začať!

    Ako organizovať projekty?

    Dohodnime sa, že riešenie bude pozostávať zo 4 projektov:
    - DomainModel - obsahuje služby a všetky druhy úložísk, jedným slovom - model;
    - Prezentácia - obsahuje aplikačnú logiku, ktorá nezávisí od vizuálnej prezentácie, t.j. všetci zástupcovia, rozhrania zobrazenia a ďalšie základné triedy;
    - UI - Windows Forms aplikácia, obsahuje len formuláre (implementácia View rozhraní) a logiku spúšťania;
    - Testy - jednotkové testy.

    Čo napísať do Main()?

    Štandardná implementácia spustenia aplikácie Windows Forms vyzerá takto:

    Súkromné ​​statické void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); // priame spustenie formulára (zobrazenie) )
    Dohodli sme sa však, že Zástupcovia budú spravovať zobrazenia, takže by sme chceli, aby kód vyzeral asi takto:

    Súkromné ​​statické void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var presenter = new LoginPresenter(new LoginForm(), new LoginService()); // Dependency Injection presenter.Run(); )
    Skúsme implementovať prvú obrazovku:

    Základné rozhrania

    // spoločné metódy pre všetky pohľady verejné rozhranie IView ( void Show(); void Close(); ) // zmluva, na základe ktorej bude zástupca interagovať s formulárom verejné rozhranie ILoginView: IView ( string Username ( get; ) string Password ( get ; ) udalosť Action Login; // udalosť "používateľ sa pokúša prihlásiť" void ShowError(string errorMessage); ) verejné rozhranie IPresenter ( void Run(); ) // hlúpa autorizačná služba verejné rozhranie ILoginService ( bool Login(User user); // true - úspešná autorizácia, inak nepravda)


    Výkon

    public class LoginPresenter: IPresenter ( súkromné ​​iba na čítanie ILoginView _view; súkromné ​​iba na čítanie ILoginService _service; verejné LoginPresenter (zobrazenie ILoginView, služba ILoginService) ( _view = zobrazenie; _service = služba; _view.Login += () => Login (_view.Username, _view .Password); ) public void Run() ( _view.Show(); ) private void Login (reťazec používateľské meno, reťazec heslo) ( if (username == null) hodiť novú ArgumentNullException("username"); if (password == null) throw new ArgumentNullException("password"); var user = nový používateľ (meno = používateľské meno, heslo = heslo); if (!_service.Login(user)) ( _view.ShowError("Neplatné používateľské meno alebo heslo"); ) else ( // úspešná autorizácia, spustenie hlavnej obrazovky (?) ) ) )


    Vytvorenie formulára a implementácia rozhrania ILoginView v ňom nie je náročná, rovnako ako napísanie implementácie ILoginService. Treba poznamenať len jednu vec:

    Verejná čiastočná trieda LoginForm: Form, ILoginView ( // ... public new void Show() ( Application.Run(this); ) )
    Toto kúzlo umožní spustiť našu aplikáciu, zobraziť formulár a po zatvorení formulára správne ukončiť aplikáciu. Ale k tomu sa vrátime neskôr.

    Budú testy?

    Od okamihu, keď je napísaný zástupca (LoginPresenter), je možné ho okamžite otestovať ako celok bez implementácie formulárov alebo služieb.
    Na písanie testov som použil knižnice NUnit a NSubstitute (knižnica na vytváranie tried stub na základe ich rozhraní, mock).

    Testy pre LoginPresenter

    Verejná trieda LoginPresenterTests ( private ILoginView _view; public void SetUp() ( _view = Substitute.For (); // zástupný symbol pre zobrazenie var service = Substitute.For (); // stub pre službu service.Login(Arg.Any ()) // autorizovaný je iba používateľ admin/heslo. Returns(info => info.Arg ().Meno == "admin" && info.Arg ().Heslo == "heslo"); var presenter = new LoginPresenter(_view, service); presenter.Run(); ) public void InvalidUser() ( _view.Username.Returns("Vladimir"); _view.Password.Returns("VladimirPass"); _view.Login += Raise.Event (); _view.Received().ShowError(Arg.Any ()); // túto metódu treba volať s textom chyby ) public void ValidUser() ( _view.Username.Returns("admin"); _view.Password.Returns("password"); _view.Login += Raise.Event (); _view.DidNotReceive().ShowError(Arg.Any ()); // v tomto prípade je všetko v poriadku ) )


    Testy sú dosť hlúpe, zatiaľ čo samotná aplikácia. Ale tak či onak boli úspešne dokončené.

    Kto a ako spustí druhú obrazovku s parametrom?

    Ako ste si mohli všimnúť, po úspešnom prihlásení som nenapísal žiadny kód. Ako môžem spustiť druhú obrazovku? Prvé, čo ma napadne, je toto:

    // LoginPresenter: úspešná autorizácia var mainPresenter = new MainPresenter(new MainForm()); mainPresenter.Run(user);
    Zhodli sme sa však na tom, že zástupcovia nevedia nič o pohľadoch okrem ich rozhraní. Čo robiť?
    Na pomoc prichádza vzor aplikačného kontroléra (implementovaný zjednodušeným spôsobom), ktorý obsahuje kontajner IoC, ktorý vie, ako získať implementačný objekt pomocou rozhrania.
    Kontrolér sa odovzdá každému zástupcovi ako parameter konštruktora (opäť DI) a implementuje približne nasledujúce metódy:

    Verejné rozhranie IApplicationController (IApplicationController RegisterView () kde TImplementation: class, TView kde TView: IView; IApplicationController RegisterService () kde TImplementation: class, TService; void Run () kde TPresenter: trieda, IPresenter; )
    Po menšom prerobení vyzeralo spustenie aplikácie takto:

    Súkromné ​​statické void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // všetky závislosti sú teraz zaregistrované na jednom mieste: var controller = new ApplicationController(new LightInjectAdapder()) .RegisterView ().RegisterService ().RegisterView (); ovládač.Spustiť (); }
    Pár slov o novom ApplicationController(new LightInjectAdapder()) . Ako IoC kontajner som použil knižnicu LightInject, ale nie priamo, ale cez adaptér (vzor adaptéra), takže ak potrebujem zmeniť kontajner na iný, mohol som napísať iný adaptér a nemeniť logiku radiča. Všetky použité metódy sú vo väčšine IoC knižníc, nemali by byť žiadne ťažkosti.
    Implementujme prídavné rozhranie IPresenter, ktoré sa líši len tým, že metóda Run akceptuje parameter. Potom z nej budeme dediť rovnakým spôsobom ako z prvej obrazovky.
    Teraz, nie bez pýchy, spúšťame druhú obrazovku a prechádzame tam autorizovaným používateľom:

    Ovládač.Spustiť (užívateľ); View.Close();

    Nemôžete jednoducho pokračovať a zavrieť formulár...

    Jedno z úskalí je spojené s riadkom View.Close(), po ktorom sa prvý formulár zatvoril a s ním aj aplikácia. Faktom je, že Application.Run(Form) spúšťa štandardnú slučku správ systému Windows a považuje odovzdaný formulár za hlavnú formu aplikácie. To je vyjadrené v skutočnosti, že aplikácia visí ExitThread na udalosti Form.Closed, čo spôsobí zatvorenie aplikácie po zatvorení formulára.
    Existuje niekoľko spôsobov, ako tento problém obísť, jedným z nich je použiť inú verziu metódy: Application.Run(ApplicationContext) , potom včas zmeniť vlastnosť ApplicationContext.MainForm. Odovzdávanie kontextu do formulárov je implementované pomocou aplikačného kontroléra, v ktorom je zaregistrovaný objekt ApplicationContext (inštancia) a následne vložený do konštruktora formulára (opäť DI) počas spúšťania zástupcu. Spôsoby zobrazenia prvých dvoch obrazoviek teraz vyzerajú takto:

    // LoginForm public new void Show() ( _context.MainForm = this; Application.Run(_context); ) // MainForm public new void Show() ( _context.MainForm = this; base.Show(); )

    Modálne okno

    Implementácia modálneho okna je jednoduchá. Kliknutím na tlačidlo „Zmeniť názov“ sa spustí Controller.Run (používateľ). Jediný rozdiel medzi týmto formulárom a ostatnými je v tom, že nie je hlavný, takže formulár na zobrazenie nevyžaduje ApplicationContext:

    Verejné nové void Show() ( ShowDialog(); )
    Ak chcete otvoriť bežné okno, metóda nemusí byť vôbec definovaná, pretože je už implementovaná v triede Form.

    Dobre, máme to... Ako teraz TOTO použiť?

    Teraz, keď je rám pripravený, pridanie nového tvaru pozostáva z nasledujúcich krokov:
    1. Napíšeme rozhranie View, Model interface (ak je to potrebné).
    2. Implementujeme Zástupcu a zároveň sa rozhodneme, či mu prenesieme nejaké údaje alebo model.
    3. [Voliteľné] Napíšeme testy pre zástupcu, aby sme sa uistili, že je všetko v poriadku.
    4. [Voliteľné] Implementujeme model a testujeme ho.
    5. Hodíme na formuláre a implementujeme rozhranie View.
    Zmena kontajnera IoC na váš obľúbený nastáva implementáciou jednoduchého rozhrania IContainer s triedou adaptéra.

    Demo projekt si môžete vyzdvihnúť z

    Posledná aktualizácia: 31. 10. 2015

    Vzhľad aplikácie sa nám prezentuje predovšetkým prostredníctvom formulárov. Tvary sú základným stavebným kameňom. Poskytujú kontajner na rôzne ovládacie prvky. A mechanizmus udalostí umožňuje prvkom formulára reagovať na vstup používateľa, a tak interagovať s používateľom.

    Pri otvorení projektu vo Visual Studiu v grafickom editore môžeme vidieť vizuálnu časť formulára – časť, ktorú vidíme po spustení aplikácie a kam prenášame prvky z ovládacieho panela. V skutočnosti však formulár skrýva výkonnú funkčnosť pozostávajúcu z metód, vlastností, udalostí atď. Uvažujme o základných vlastnostiach foriem.

    Ak spustíme aplikáciu, zobrazí sa nám jeden prázdny formulár. Avšak aj taký jednoduchý projekt s prázdnou formou má niekoľko komponentov:

    Napriek tomu, že vidíme iba formulár, východiskovým bodom vstupu do grafickej aplikácie je trieda Program nachádzajúca sa v súbore Program.cs:

    Používanie systému; pomocou System.Collections.Generic; pomocou System.Linq; pomocou System.Threading.Tasks; pomocou System.Windows.Forms; menný priestor HelloApp ( statická trieda Program ( static void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); ) ) )

    Program najprv spustí túto triedu a potom použije výraz Application.Run(new Form1()) na spustenie Form1. Ak zrazu chceme zmeniť počiatočný formulár v aplikácii na nejaký iný, potom musíme zmeniť Form1 v tomto výraze na zodpovedajúcu triedu formulára.

    Samotná forma je obsahovo zložitá. Je rozdelená na množstvo komponentov. Takže v štruktúre projektu je súbor Form1.Designer.cs, ktorý vyzerá asi takto:

    Priestor názvov HelloApp ( čiastočná trieda Form1 ( ///

    /// Požadovaná premenná dizajnéra. /// private System.ComponentModel.ICcontainer components = null; /// /// Vyčistite všetky používané zdroje. /// /// pravda, ak by sa spravované zdroje mali zlikvidovať; inak nepravda. protected override void Dispose(bool disposing) ( if (likvidácia && (komponenty != null)) ( components.Dispose(); ) base.Dispose(disposing); ) #region Windows Form Designer vygenerovaný kód /// /// Požadovaná metóda pre podporu návrhára - neupravujte /// obsah tejto metódy pomocou editora kódu. /// private void InitializeComponent() ( this.SuspendLayout(); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; toto .ClientSize = new System.Drawing.Size(284, 261); this.Name = "Form1"; this.Text = "Ahoj svet!"; this.ResumeLayout(false); ) #endregion ) )

    Toto deklaruje čiastočnú triedu formulára Form1, ktorá má dve metódy: Dispose(), ktorá funguje ako deštruktor objektov, a InitializeComponent(), ktorá nastavuje počiatočné hodnoty vlastností formulára.

    Keď pridáte ovládacie prvky, ako napríklad tlačidlá, do tohto súboru sa pridá aj ich popis.

    Ale v praxi sa s touto triedou stretneme len zriedka, keďže plnia hlavne dizajnové funkcie – nastavenie vlastností objektu, nastavenie premenných.

    Ďalší súbor - Form1.resx- zásoby tvoria zdroje. Spravidla sa zdroje využívajú na vytváranie jednotných foriem pre niekoľko jazykových kultúr naraz.

    A dôležitejší súbor - Form1.cs, ktorý sa v štruktúre projektu nazýva jednoducho Form1, obsahuje kód alebo programovaciu logiku formulára:

    Používanie systému; pomocou System.Collections.Generic; pomocou System.ComponentModel; pomocou System.Data; pomocou System.Drawing; pomocou System.Linq; pomocou System.Text; pomocou System.Threading.Tasks; pomocou System.Windows.Forms; menný priestor HelloApp ( verejná čiastočná trieda Form1: Form ( public Form1() ( InitializeComponent(); ) ) )

    V predvolenom nastavení existuje iba návrhár formulárov, ktorý jednoducho volá metódu InitializeComponent() deklarovanú v súbore návrhára Form1.Designer.cs. Práve s týmto súborom budeme viac pracovať.



     

    Môže byť užitočné prečítať si: