【问题标题】:Using a generic clear textbox method on event在事件上使用通用的清除文本框方法
【发布时间】:2014-01-19 20:19:16
【问题描述】:

我有一个程序,里面有很多文本框,我想在 _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
}

【问题讨论】:

  • 您对带水印的文本框感兴趣吗?

标签: c# validation input textbox


【解决方案1】:

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

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元素传递给它。但是没有这个必要,你可以直接清除你的文本框,如上代码所示。

另外,如果你想同时清除所有的文本框,例如单击一个按钮,你可以使用这个:

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

【讨论】:

    【解决方案2】:

    您可以为此使用 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】:

      您可以从事件发送者那里获取文本框的名称:

      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 值,该值应将自身重置为比空字符串更有意义的内容(您可以使用属性窗口)。

      【讨论】:

        【解决方案4】:

        这会很糟糕 - 因为每次有人点击文本框时都会导致页面重新加载。

        更简单的方法是在 javascript 中进行。

        只需添加一个清除文本框的功能,然后可能使用 css 选择器为您要使用的每个文本框启用该功能。

        例如

        <input type="text" class="clearme" />
        
        $(".clearme").click(function() {
            $(this).val('');
        });
        

        这将在客户端完成所有操作,而不会导致任何回发。

        【讨论】:

        • 谢谢,但我使用的是 Windows 窗体。
        • 哦,我明白了! Mu 道歉,我以为它是一个网络表单应用程序。
        猜你喜欢
        • 1970-01-01
        • 2018-01-07
        • 2013-08-27
        • 2013-01-08
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多