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)