2. OdstraneniDiakritikyWPF

2.4. C#

V souboru MainWindow.xaml.cs obsahující kód na pozadí (Code Behind) byla vygenerována základní struktura našeho programu v C#. Vedle konstruktoru MainWindow této třídy byly také vygenerovány soukromé (private) metody bez návratu, které umístíme do oblasti Události:

  • BtnOdstranitDiakritiku_Click
  • BtnKonec_Click
Do regionu Události umístíme první metodu bez návratu pro obsluhu události tlačítka BtnOdstranitDiakritiku. V této metodě provedeme načtení zadaného textu (v objektu TxtVstupniText typu TextBox). Výstupní text nebude obsahovat žádnou diakritiku a bude vypsán na formuláři ve výstupním poli TxtVystupniText (TextBox) - viz Kód 1.

private void BtnOdstranitDiakritiku_Click(object sender, RoutedEventArgs e)
{
    /* Deklarace: 'vstupniText' ... textový řetězec zadaný uživatelem, u něhož 
     * má být odstraněna diakritika */
    string vstupniText;
 
    // Načtení textového řetězce zadaného na formuláři
    vstupniText = this.TxtVstupniText.Text;
 
    // Zavolání metody, která navrací textový řetězec bez diakritiky
    this.TxtVystupniText.Text = OdstranitDiakritiku(vstupniText);
}

Kód 1: Deklarace metody pro převod čísla do zvolené soustavy (BtnOdstranitDiakritiku_Click)

Do regionu Výpočty umístíme metodu, která bude z předaného textu (načteného z formuláře) odstraňovat diakritiku. 

Do deklarované metody OdstranitDiakritiku s textovým návratem je předán načtený text z formuláře - viz Kód 2. Tento parametr je předán hodnotou, tzn. jeho hodnota je nakopírována do formálního parametru s ve volané metodě. Na začátku těla metody jsou deklarovány následující proměnné. U některých z těchto proměnných je v deklaraci zároveň provedena inicializace:

  • bezDia ... výstupní textový řetězec, tj. vstupní řetězec po odstranění diakritiky - inicializace prázdným textem
  • poceZnaku ... celočíselný počet znaků ve vstupním řetězci - inicializace délkou (počtem znaků) vstupního řetězce
  • sDiakritikou ... textový řetězec obsahující diakritiku - inicializace znaky s diakritikou 
  • bezDiakritiky ... textový řetězec neobsahující diakritiku - inicializace stejnými znaky ale bez diakritiky 
  • i ... pozice znaku ve vstupním textovém řetězci 

V metodě je použit stejný princip jako v příkladu OdstraneniDiakritiky pro konzolovou aplikaci, proto již není nutné znovu popisovat prováděné příkazy uvnitř metody.

/// <summary>
/// Metoda s návratem textového řetězce bez diakritických znamének
/// </summary>
/// <param name="s"> vstupní řetězec s diakritikou </param>
/// <returns> výstupní řetězec bez diakritiky </returns>
private string OdstranitDiakritiku(string s)
{
    /* Deklarace: 'bezDia' ... výstupní řetězec, tj. vstupní řetězec po odstranění 
     * diakritiky - inicializace; 'pocetZnaku' ... počet znaků ve vstupním řetězci - 
     * inicializace */
    string bezDia = "";
    int pocetZnaku = s.Length; ;
 
    // Deklarace textového řetězce obsahujícího diakritiku včetně inicializace 
    const string sDiakritikou = "ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťúůÚÝýŽž";
 
    // Deklarace textového řetězce neobsahujícího diakritiku včetně inicializace 
    const string bezDiakritiky = "AaCcDdEeEeIiNnooRrSsTtuuUYyZz";
 
    /* Pro každý znak ve vstupním textovém řetězci - 'i' ... pozice znaku ve vstupním 
    textovém řetězci */
    for (int i = 0; i < pocetZnaku; i++)
    {
        /* Pokud textový řetězec s diakritikou obsahuje znak na 'i'-té pozici ve vstupním 
         * textovém řetězci */
        if (sDiakritikou.Contains(s[i]) == true)
        {
            /* Pro každý znak v řetězci 'sDiakritikou' - 'j' ... pozice znaku 
             * v řetězci s diakritikou */
            for (int j = 0; j <= sDiakritikou.Length - 1; j++)
            {
                /* Pokud se znak ve vstupním řetězci na pozici 'i' nachází také v textovém 
                 * řetězci 'sDiakritikou' (na pozici 'j'), tj. obsahuje diakritiku ... */
                if (s[i] == sDiakritikou[j])
                {
                    /* Připoj znak z řetězce 'bezDiakritiky' na stejné pozici 'j', na které 
                     * byl vyhledán v řetězci 'sDiakritikou' (prohození znaku s diakritikou 
                     * za znak bez diakritiky) */
                    bezDia += bezDiakritiky[j];
                }
            }
        }
        else
        {
            // Přidej znak ze vstupního řetězce do výstupního řetězce
            bezDia += s[i];
        }
    }
 
    // Přiřazení návratu metody
    return bezDia;
}

Kód 2: Deklarace soukromé metody s textovým návratem (OdstranitDiakritiku)

Poslední metodou v regionu Události, kterou musíme upravit je metoda pro obsluhu události Click tlačítka Konec. Tato metoda nám zavře formulář - viz Kód 3.

private void BtnKonec_Click(object sender, RoutedEventArgs e)
{
    // Zavření formuláře
    this.Close();
}

Kód 3: Deklarace metody bez návratu pro zavření formuláře (BtnKonec_Click)