在事件上使用通用的clear textbox方法

时间:2014-01-19 20:19:17

标签: c# validation input textbox

我有一个包含很多文本框的程序,我有文本框,我希望在_click上清除,然后如果没有输入任何内容并且用户点击了,则重置为默认值。

我打算这样做显然效率低下,不得不每次都给文本框命名,我想知道如何简化它。

这就是我现在得到的,我每次都必须更改文本框字段名称的txtUserName

private void txtUserName_Click(object sender, EventArgs e)
{
    txtUserName.Text = ""
    txtUserName.ForeColor = Color.Black;
}

我有什么方法可以做到

private void txtAnyTextBox_Click(object sender, EventArgs e)
{
    string caller = //Get this textbox name
    this.ClearBoxes(caller)
}

void ClearBoxes(string Caller)
{
    Caller.txt.Text = "";
   //..... and so on
}

4 个答案:

答案 0 :(得分:2)

是的,你可以试试这个(虽然它不是通用的,但在这种情况下不需要泛型):

private void txtAnyTextBox_Click(object sender, EventArgs e)
{
   TextBox tb = sender as TextBox;
   if(tb != null) tb.Text = "";
}

您可以将此方法附加到所有文本框Click event

textBox1.Click += txtAnyTextBox_Click;
textBox2.Click += txtAnyTextBox_Click;

我认为这不会起作用:

void ClearBoxes(string Caller)
{
   Caller.txt.Text = "";
   //..... and so on
}

如果您想使用ClearBoxes方法,则应将TextBox元素传递给它。但是没有必要,您可以直接清除textBox,如上图所示。

此外,如果您想要同时清除所有TextBox,例如单击一次按钮就可以使用它:

private void button1_Click(object sender, EventArgs e)
{
    foreach (var tBox in this.Controls.OfType<TextBox>())
    {
        tBox.Text = "";
    }
}

答案 1 :(得分:1)

您可以从事件发件人获取文本框的名称:

private void txtAnyTextBox_Click(object sender, EventArgs e)
{
    TextBox textBox = (TextBox)sender;
    string caller = textBox.Name;
    this.ClearBoxes(caller); // call your custom method
}

如果您只想清除文本框文本,则无需获取其名称 - 您可以使用Clear()方法:

private void txtAnyTextBox_Click(object sender, EventArgs e)
{
    TextBox textBox = (TextBox)sender;
    textBox.Clear();
}

此外,您可以考虑创建自定义文本框,该文本框将具有一些默认值,并在单击时重新发送为默认值:

public class CustomTextBox : TextBox
{
    public string DefaultText { get; set; }

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        Text = DefaultText;
    }
}

使用自定义文本框而不是默认文本框,并为每个自定义文本框提供DefaultText值,该文本框应将自身重置为比空字符串更有意义的内容(您可以使用“属性”窗口)。

答案 2 :(得分:1)

您可以使用sender参数。

private void txtAnyTextBox_Click(object sender, EventArgs e)
{
    var textbox = sender as TextBox;
    this.ClearTextbox(textbox)
}

private void ClearTextbox(TextBox textbox)
{
    textbox.Text = "";
    //...
}

答案 3 :(得分:0)

这会非常讨厌 - 因为每次有人在文本框中点击时都会重新加载页面。

更简单的方法是在javascript中执行此操作。

只需添加一个函数来清除文本框,然后可以使用css选择器为你想要使用它的每个文本框启用该函数。

e.g。

<input type="text" class="clearme" />

$(".clearme").click(function() {
    $(this).val('');
});

这将在所有客户端执行而不会导致任何回发。