WPF c # игра Палач: заполните пропущенные буквы - PullRequest
0 голосов
/ 10 мая 2018

Хорошо, вот мой код, я объясню его позже:

        private void TypedWord_Click(object sender, RoutedEventArgs e)
    {

        MessageBoxResult confirmatBoxResult = System.Windows.MessageBox.Show("Are you sure ?", "Confirm", System.Windows.MessageBoxButton.YesNo);
        if (confirmatBoxResult == MessageBoxResult.Yes)
        {

            for (char i = 'a'; i < 'z'; i++)
            {
                Button btn = new Button();
                btn.Content = i;
                btn.Width = 60;
                btn.Height = 60;
                btn.FontSize = 36;
                btn.Click += new RoutedEventHandler(btnLetter_Click);
                panel_lettre.Children.Add(btn);
            }


            foreach (char c in txtMot.Text)
            {
                Label Lbl = new Label();
                Lbl.Content = c;
                Lbl.Content = "_";
                Lbl.FontSize = 36;
                Lbl.Width = 30;
                panel_label.Children.Add(Lbl);
            }

            TypedWord_Click.IsEnabled = false;

        }

    }

    private void btnLetter_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("I am the button : " + ((Button)sender).Content.ToString());
    }

}

TypedWord_Click - моя кнопка, когда вы нажимаете на нее, она динамически отображает все 26 буквалфавит , которые являются кнопками .

И после этого, в верхней части, у меня есть div, где я размещаю динамически метки.И эти метки происходят от txtMot.text , который является текстовым полем, которое получает пользовательский ввод.

Затем я заменяю эти слова на подчеркивание "_" .

Так что если я наберу: «test», он покажет: _ _ _ _ В соответствии с каждой буквой моего слова.


Под ним есть событиепо щелчку: btnLetter_Click , который просто показывает в окне сообщения каждую букву в соответствии с их кнопкой.

Так что, если я нажму на "а", он покажет => Якнопка a

Дело в том, что это последнее, что на самом деле я не ищу.Я хотел бы заполнить пропущенные буквы из текстового поля txtMot.Text в соответствии с тем, что набрал пользователь.

Поэтому, если я напишу «test», он покажет => _ _ _ _ => из ярлыка.

Тогда у меня есть 26 букв алфавита.

И вот оно: как я могу это сделать, если я нажму, скажем, "t", тогда оно заполняется следующим образомэто => т_ _ т?

1 Ответ

0 голосов
/ 11 мая 2018

Здесь есть альтернатива проходу каждого Label для поиска подходящей буквы.

Использует сегменты Label с для каждой буквы, аналогично Radix sort.

public MainWindow()
{
    InitializeComponent();

    // Look up label elements by letter
    var labelsLookupByLetter = new Dictionary<char, List<Label>>();

    var buttonsPanel = new UniformGrid
    {
        Columns = 8,
        HorizontalAlignment = HorizontalAlignment.Left,
        VerticalAlignment = VerticalAlignment.Top
    };
    for (var c = 'a'; c <= 'z'; c++)
    {
        var ch = c;
        var cmd = new Button
        {
            Content = c,
            Width = 24,
            Height = 24
        };
        buttonsPanel.Children.Add(cmd);
        labelsLookupByLetter[ch] = new List<Label>();
        cmd.Click += (sender, e) =>
        {
            if (labelsLookupByLetter.TryGetValue(ch, out var textList))
            {
                foreach (var el in textList)
                {
                    el.Content = ch;
                }
            }
        };
    }

    // Text panel
    var labelsPanel = new WrapPanel();
    var text = "helloworld";
    foreach (var ch in text)
    {
        var textBlock = new Label
        {
            Content = "_"
        };
        labelsLookupByLetter[ch].Add(textBlock);
        labelsPanel.Children.Add(textBlock);
    }

    Content = new StackPanel
    {
        Children = { labelsPanel, buttonsPanel }
    };
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...