C# Winform:切换TextBox中更改的文本控件可见性的干净方法

C# Winform:切换TextBox中更改的文本控件可见性的干净方法,c#,winforms,visibility,C#,Winforms,Visibility,我有一个winform,其中有许多TextBox和一条消息,我希望消息在任何TextBox被更改时消失。是否有一种干净的方法可以实现这一点,而无需将TextChangedEventHander添加到所有TextBox 我混乱的做法如下: public static DialogResult ShowDialog() { var inputBox = new Form { ClientSize = new Size(520, 225), FormBorderStyle = FormBord

我有一个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();
}

您可以尝试编写一个函数来创建
TextBox

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();
}
注意

如果有太多的参数,您可以尝试使用类来携带这些参数并传递