Member 14922487 Ответов: 1

Создание меток сообщений об ошибках на основе пользовательского ввода WPF C#


Привет,
Я создаю приложение WPF на C#, которое создает математические задачи для детей(сложение, вычитание и т. д.). В одном пользовательском контроллере у меня есть кнопка "Начать", которая загружает другой UC, и в этом UC у меня есть 10 задач, рядом с каждой задачей у меня есть текстовое поле для ввода ответа пользователем, и у меня есть кнопка "Подтвердить" (все это динамически создается), чтобы иметь возможность составить список ответов пользователя при нажатии кнопки. Но теперь у меня есть проблема с пустыми текстовыми полями.
Я хочу, когда нажимается кнопка "Подтвердить", проверить, есть ли пустое текстовое поле, и если есть/есть, я хочу, чтобы рядом с этим пустым полем/э появилась метка/ы с некоторым текстом. Как только пользователь начнет печатать в том или ином конкретном текстовом поле(окнах), я хочу, чтобы эта метка исчезла.

Что я уже пробовал:

This is where I create tasks and Text Boxes:

public void CreateTasksVisually(UCFirstLevelAddition userControl, List<string> additionTasksList)
        {
            int x = 350, y = 200;
            for (int i = 0; i < 10; i++)
            {
                userControl.Controls.Add(new Label
                {
                    Text = additionTasksList[i],
                    Height = 40,
                    Width = 100,
                    Name = "additionTaskLabel" + i,
                    BackColor = Color.Transparent,
                    Location = new Point(x, y + 15)
                });

                userControl.Controls.Add(new TextBox
                {
                    Name = "container" + i.ToString(),
                    Text = "",
                    Height = 20,
                    Width = 50,
                    BackColor = Color.White,
                    Location = new Point(x + 120, y + 15)

                });

                y = y + 60;
            }
        }


Именно здесь я создаю кнопку "Подтвердить":
public Button CreateSubmitBtnVisually(UCFirstLevelAddition userControl)
       {
           int x = 350, y = 200;
           Button submitBtn = new Button();
           submitBtn.Name = "btnSubmit";
           submitBtn.Text = "Potvrdi";
           submitBtn.Size = new Size(100, 40);
           submitBtn.Location = new Point(350, 829);

           submitBtn.Click += new EventHandler(userControl.submitBtn_Click);

           userControl.Controls.Add(submitBtn);
           return submitBtn;
       }


И вот здесь я пытаюсь проверить, не пусто ли какое-нибудь из текстовых полей:
public void CreateEmptyContainerLabels(UCFirstLevelAddition userControl)
        {
            int x = 550, y = 180;
            Label message = new Label();
            foreach (Control c in userControl.Controls)
            {
                if (c is TextBox)
                {
                    TextBox container = c as TextBox;
                    if (container.Text.Length == 0)
                    {
                        message.Text = string.Format("Ne sme biti prazno!");
                        message.Width = 400;
                        message.ForeColor = Color.Red;
                        message.Font = new Font("Century Gothic", 16, FontStyle.Bold);
                        message.Location = new Point(x, y + 40);
                    }
                    userControl.Controls.Add(message);
           
                    y = y + 60;
                }
            }

        }


Но этот чек не делает того, что я хочу. Вы можете мне помочь с этим?
Заранее благодарю.

BillWoodruff

смотрите: https://kmatyaszek.github.io/wpf%20validation/2019/03/06/wpf-validation-using-idataerrorinfo.html

BillWoodruff

Просто чтобы убедиться: это в WPF или WinForms для создания ?

BillWoodruff

Также смотрите: https://stackoverflow.com/a/18204513/133321

1 Ответов

Рейтинг:
5

Gerry Schmitz

"Не делаю того, что хочу". "Ярлык" тяжелее текстового блока. А поскольку вы можете свернуть элементы управления, нет особого смысла добавлять примитивы на лету. В любом случае, есть несколько рекомендуемых практик при работе с валидацией.

Проверка с помощью интерфейса IDataErrorInfo (C#) | Microsoft Docs[^]


BillWoodruff

Мой голос за № 2:

"Метка" тяжелее текстового блока": метка-это примерно такой же легкий элемент управления, как вы можете использовать.

Ваша ссылка указывает на пример в приложении ASP MVC: вопрос касается WPF; однако IDataErrorInfo доступен в WPF.

Gerry Schmitz

Тебе нужно найти другой мусорный контейнер.

https://stackoverflow.com/questions/5382925/difference-between-label-and-textblock

BillWoodruff

Личные нападки и оскорбления неуместны ни на одном форуме КП.

Я установил ваш рейтинг на #!.

Код операции показывает создание текстовых полей WPF, а не текстовых блоков:

https://stackoverflow.com/questions/18204245/is-there-any-difference-between-wpf-textblock-and-textbox

На самом деле в коде нет ничего, что подразумевало бы WPF.

Жаль, что вы не дали OP ссылку на сравнение в WPF Label и TextBlock ... это могло бы оказаться полезным.

Gerry Schmitz

Все еще толще кирпича и избирательное понимание. А ты-тролль.

"Я создаю приложение WPF на C# ...'

"... Я хочу, чтобы ярлыки появлялись с каким-то текстом рядом с этим пустым полем. "