Dvourozměrné pole - WPF
4. C#
4.3. Zobrazení pole
Pojďme se nyní podívat na metody umístěné v regionu Zobrazení pole, který je součástí regionu Události, ve kterém jsou umístěny metody pro obsluhu událostí objektů formuláře. Tento region obsahuje následující metody:
- BtnJakoText_Click
- BtnDoMrizky_Click
Abychom mohli matici zobrazit jako text v objektu typu TextBox, je zapotřebí převést její obsah na text. V regionu Zobrazení pole, který je součástí regionu Pomocné metody, budeme deklarovat metodu PoleJakoText, která navrací textový řetězec, který bude obsahovat hodnoty jednotlivých prvků matice, které budou vypsány v jednotlivých řádcích a sloupcích - viz Kód 1. Hodnoty budou od sebe odděleny čárkou.
V metodě deklarujeme pomocnou lokální proměnnou vystup, do níž budeme ukládat výstupní řetězec. Lokální proměnnou budeme inicializovat prázdným textem. V cyklech s krokem (vnější cyklus bude použit pro procházení řádků a vnější pro procházení sloupců) budeme procházet prvky matice. V těle cyklu použijeme konverzi třídy string, kde za každé vypsané číslo do výstupního řetězce umístíme čárku. K tomu použijeme metodu Format, která nám převede číslo uložené v prvku na pozici [i, j]. Hodnota čísla prvku (je indexována 0 ve složené závorce) je převedena do specifikovaného formátu, tj. na 3 číslice (formát D3). Tato metoda je součástí třídy (datového typu) string.
Pokud byly vypsány prvky ve všech sloupcích v řádku, umístíme do výsledného výpisu nový odstavec pomocí vlastnosti NewLine třídy Environment.
Návratem metody je výsledný textový řetězec obsahující vypsané prvky matice.
/// <summary> /// Prvky v sloupcích matice jsou převedeny na text a odděleny čárkou, kde každá řádka /// matice je umístěna na novém řádku v objektu /// </summary> /// <param name="m"> počet řádků matice </param> /// <param name="n"> počet sloupců matice </param> /// <param name="pole"> matice </param> /// <returns> výstupní textový řetezec s prvky matice </returns> private string PoleJakoText(int m, int n, int[,] pole) { /* Lokální proměnná: 'vystup' - výsledek převodu na text - inicializace * a vložení nového řádku */ string vystup = ""; // Procházení řádků matice for (int i = 0; i < m; i++) { // Procházení sloupců matice for (int j = 0; j < n; j++) { // Převod hodnoty prvku na text včetně připojení čárky vystup += string.Format("{0:D3}, ", pole[i, j]); } // Přidání odstavce na konci každého řádku (také možnost vložení "\n") vystup += Environment.NewLine; } // Návrat výsledného textového řetězce return vystup; }
Kód 1: Deklarace metody pro převod prvků předané matice do textového řetězce - oddělení prvků čárkami (PoleJakoText)
Další metodou, kterou budeme muset přidat do stejného regionu, je metoda bez návratu s názvem ZobrazitPoleJakoText, která zajistí zobrazení matice v objektu typu TextBox s názvem TxtVysledek, který je umístěn na formuláři - viz Kód 2. V těle metody budeme volat předchozí deklarovanou metodu PoleJakoText, které předáme hodnotou počet prvků a vektor. Výstupní řetězec, obdržený jako návrat volané metody, přiřadíme do vlastnosti Text objektu TxtVysledek.
/// <summary> /// Zobrazení matice na formuláři jako text v objektu typu TextBox /// </summary> /// <param name="m"> počet řádků matice </param> /// <param name="n"> počet sloupců matice </param> /// <param name="pole"> matice </param> private void ZobrazitPoleJakoText(int m, int n, int[,] pole) { // Výpis matice v objektu typu TextBox na formuláři this.TxtVysledek.Text = this.PoleJakoText(m, n, pole); }
Kód 2: Deklarace metody pro zavolání metody pro převod prvků matice na textový řetězec (ZobrazitPoleJakoText)
Abychom přiřadili akci tlačítku, které spustí zobrazení matice jako text, přemístíme se do regionu Události a jeho části Zobrazení pole. V tomto regionu upravíme metodu obsluhy události stisknutí tlačítka BtnJakoText, která bude volat předchozí metodu ZobrazitPoleJakoText - viz Kód 3. Této metodě předáme předáme parametry, kterými jsou počet řádků matice, počet sloupců matice a samotná matice.
/// <summary> /// Volání metody pro zobrazení matice jako text v objektu typu TextBox na formuláři /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnJakoText_Click(object sender, RoutedEventArgs e) { // Zavolání metody pro zobrazení matice jako text v objektu na formuláři this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole); }
Kód 3: Deklarace metody pro zavolání metody pro zobrazení matice jako text v objektu na formuláři (BtnJakoText_Click)
Další metodou, kterou budeme deklarovat v regionu Pomocné metody v regionu Zobrazení pole, je soukromá metoda bez návratu s názvem ZobrazitPoleVListView - viz Kód 4. V tomto případě jsou metodě předány parametry vyjadřující počet řádků matice, počet sloupců matice a matice samotná. Na začátku metody deklarujeme textovou proměnnou radka, do níž budeme ukládat obsah řádku matice, který budeme vypisovat do řádku v objektu LstMatice, který je typu ListView. Proto nejprve vymažeme předchozí obsah zobrazený v tomto objektu pomocí metody Clear. To provedeme pomocí tečkové notace u objektu. Pomocí dvou cyklů s krokem (vnější - procházení řádků, vnitřní - procházení sloupců) budeme procházet jednotlivé prvky matice. Ve vnitřním cyklu budeme jednotlivé prvky řádky matice umísťovat do proměnné radka a po ukončení tohoto cyklu proměnnou vypíšeme do objektu LstMatice pomocí vlastnosti Items (kolekce prvků objektu), kterou vyvoláme pomocí tečkové notace. U této vlastnosti lze volat metodu s návratem Add, pomocí které přidáme (vypíšeme) řádek matice (uložený v proměnné radek) do objektu LstMatice. Návrat metody Add vyjadřuje zda byl předaný objekt přidán (hodnota 0), nebo zda nešel přidat (hodnota -1) do objektu LstMatice.
/// <summary> /// Zobrazení prvků matice na formuláři v objektu typu ListView /// </summary> /// <param name="m"> počet řádků matice </param> /// <param name="n"> počet sloupců matice </param> /// <param name="pole"> matice </param> private void ZobrazitPoleVListView(int m, int n, int[,] pole) { // Lokální proměnná: 'radka' - řádka matice převedená na text string radka; // Vymazání předchozí obsahu (přidaných prvků) this.LstMatice.Items.Clear(); // Procházení řádků matice for (int i = 0; i < m; i++) { // Vymazání předchozího obsahu řádky (textového řetězce) radka = ""; // Procházení sloupců matice for (int j = 0; j < n; j++) { // Převod hodnoty prvku na text včetně připojení čárky radka += string.Format("{0:D3}, ", pole[i, j]); } // Přidání textového řetězce (řádky matice) do obsahu objektu this.LstMatice.Items.Add(radka); } }
Kód 4: Deklarace metody pro zobrazení prvků předané matice v objektu typu ListView (ZobrazitPoleVListView)
Kvůli úpravě metody pro obsluhy události stisknutí tlačítka BtnDoMrizky se přemístíme se zpět do regionu Události a jeho části Zobrazení pole. V rámci těla metody budeme volat předchozí deklarovanou metodu ZobrazitPoleVListView, které předáme jako parametry počet řádků a sloupců matice a matici - viz Kód 5.
/// <summary> /// Volání metody pro zobrazení prvků matice v objektu typu ListView na formuláři /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnDoMrizky_Click(object sender, RoutedEventArgs e) { // Zavolání metody pro zobrazení prvků matice do mřížky na formuláři this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole); }
Kód 5: Deklarace metody pro zavolání metody pro zobrazení matice v objektu typu ListView na formuláři (BtnDoMrizky_Click)