Winform:一种在TextBox中切换TextChanged控件可见性的干净方法

时间:2018-10-06 06:49:15

标签: c# winforms visibility

我有一个包含许多TextBox的winform和一条消息,我希望当TextBox中的任何一个更改时消息消失。有没有一种干净的方法可以在不向所有TextChanged添加TextBox EventHander的情况下实现这一目标?

我的混乱方式如下:

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 :(得分:0)

您可以尝试编写一个函数来创建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();
}

注意

如果参数太多,可以尝试使用一个类来传递和传递这些参数。