2. OdstraneniDiakritikyWPF

2.5. Výsledný kód

XAML kód

Výsledný XAML kód formuláře (MainWindow.xaml) - viz Kód 1.

<Window x:Class="OdstraneniDiakritikyWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OdstraneniDiakritikyWPF"
        mc:Ignorable="d"
        Title="Odstranění diakritiky" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Label Content="Odstranění diakritiky" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" Margin="0,10"/>
        <GroupBox Header="Vstupní data" Grid.Row="1" Margin="5,10">
            <StackPanel Margin="5,10,5,5">
                <Label Content="Zadejte vstupní text:" />
                <TextBox Name="TxtVstupniText" Text="?" Margin="15,5,5,5" FontSize="14" FontWeight="Bold" Padding="5" TextWrapping="Wrap"/>
            </StackPanel>
        </GroupBox>
        <GroupBox Header="Výstupní data" Grid.Row="2" Margin="5,10">
            <StackPanel Margin="5,10,5,5">
                <Label Content="Výstupní text bez diakritiky:" />
                <TextBox Name="TxtVystupniText" Margin="15,5,5,5" FontSize="14" FontWeight="Bold" Padding="5" IsReadOnly="True" 
                         TextWrapping="Wrap" Background="AliceBlue"/>
            </StackPanel>
        </GroupBox>
        <StackPanel Grid.Row="4">
            <WrapPanel HorizontalAlignment="Center">
                <Button Name="BtnOdstranitDiakritiku" Content="Odstranit diakritiku" Margin="5" Padding="10,5" Click="BtnOdstranitDiakritiku_Click"/>
            </WrapPanel>
            <WrapPanel HorizontalAlignment="Right">
                <Button Name="BtnKonec" Content="Konec" Margin="5" Width="100" Padding="5" Click="BtnKonec_Click"/>
            </WrapPanel>
        </StackPanel>
    </Grid>
</Window>

Kód 1: Výsledný XAML kód vytvořeného formuláře

C# kód

Code Behind - C# kód pro veškeré události vyvolané uživatelem při manipulaci s aplikací (MainWindow.xaml.cs) - viz Kód 2.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace OdstraneniDiakritikyWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        #region Výpočty
 
        /// <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;
        }
        #endregion
 
 
        #region Události
        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);
        }
 
        private void BtnKonec_Click(object sender, RoutedEventArgs e)
        {
            // Zavření formuláře
            this.Close();
        }
        #endregion
    }
}

Kód 2: Výsledný C# kód vytvořeného formuláře a metod jeho prvků


Výstup programu

Na následujícím výstupu programu vidíme výpis textového řetězce, ze kterého byla odstraněna diakritika u všech písmen. Vstupní textový řetězec byl načten od uživatele na formuláři - viz Výstup programu - Kód 1 a 2.   


Výstup programu - Kód 1 a 2: Ukázka výpisu textu s odstraněnou diakritikou (OdstraneniDiakritikyWPF)