Winform: чистый способ переключения видимости элемента управления на TextChanged в TextBox - PullRequest
0 голосов
/ 06 октября 2018

У меня есть winform со многими TextBox и одним сообщением, я хочу, чтобы сообщение исчезло при изменении любого из TextBox.Есть ли чистый способ добиться этого без добавления TextChanged EventHander ко всем TextBox?

Мой грязный способ сделать это заключается в следующем:

public static DialogResult ShowDialog()
{
    var inputBox = new Form { ClientSize = new Size(520, 225), FormBorderStyle = FormBorderStyle.FixedDialog };
    var input1 = new TextBox { Location = new Point(25, 25)};
    var input2 = new TextBox { Location = new Point(25, 60) };

    // Many more text boxes...

    var label = new Label { Text = "Text", Location = new Point(25, 90), Visible = true };

    input1.TextChanged += new EventHandler((sender, e) => label.Visible = false);
    input2.TextChanged += new EventHandler((sender, e) => label.Visible = false);

    // Add handler for all TextBoxes...

    inputBox.Controls.Add(input1);
    inputBox.Controls.Add(input2);
    inputBox.Controls.Add(label);

    return inputBox.ShowDialog();
}

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете попытаться написать функцию для создания TextBox.

let TextBox начальной настройки и кода привязки события в функции.

private static TextBox CreateTextBox(int xPos,int yPos,Label label){

    var input1 = new TextBox { Location = new Point(xPos, yPos)};
    input1.TextChanged += new EventHandler((sender, e) => label.Visible = false);
    return input1;
}

Вам просто нужно вызватьфункция в методе inputBox.Controls.Add и передача необходимых параметров.

public static DialogResult ShowDialog()
{
    var inputBox = new Form { ClientSize = new Size(520, 225), FormBorderStyle = FormBorderStyle.FixedDialog };

    var label = new Label { Text = "Text", Location = new Point(25, 90), Visible = true };

    inputBox.Controls.Add(CreateTextBox(25, 25,label));
    inputBox.Controls.Add(CreateTextBox(25, 60,label));
    inputBox.Controls.Add(label);

    return inputBox.ShowDialog();
}

ПРИМЕЧАНИЕ

если параметров слишком много, вы можете попробовать использовать классчтобы нести их и передать.

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