【问题标题】:Clearing textboxes c#清除文本框 c#
【发布时间】:2016-04-02 20:16:25
【问题描述】:

所以我有:

3 个文本框,1 个清除所有按钮(应清除所有文本框)和 1 个清除选定文本框(仅清除选定文本框)。

我该怎么做呢?这是我的代码:

        private void ClearAllTextBox_Click(object sender, EventArgs e)
    {
        foreach (Control c in Controls)
        {
            if (c is TextBox)
            {
                c.Text = "";
            }
        }
    }

我还没有发布“清除当前字段”按钮的代码。

这样,当我第一次按下按钮时,它只会清除 SecondOperatorTextBox 和 ResultTextBox。如果我再次单击它,它将清除 FirstOperatorTextBox。

如何使用 1 个按钮清除所有 3 个文本框,并仅使用另一个按钮清除选中的文本框?

【问题讨论】:

  • 每次单击按钮时,您发布的代码都会清除所有三个。我怀疑您在将事件连接到按钮时出错了。如果您在FirstOperandTextBox.Clear(); 上设置断点然后单击全部清除按钮,调试器会告诉您什么?另外,selected是指focused吗?
  • @Ken White “选择”是指光标所在的文本框。
  • 那你的意思是专注。文本框是焦点控件。
  • and only clear selected with another button 请记住,一旦单击此按钮,您的 TextBox 将失去 焦点。有一个不错的小环形交叉路口,虽然很老套,that you can find here

标签: c#


【解决方案1】:

您的ClearAllTextBoxes_Click 事件处理程序似乎清除了所有三个文本框,所以我将尝试一键回答清除“选定文本框”。

我在这里看到的问题是选定的文本框是什么意思?这可能意味着焦点文本框(如果启用且不是只读的,它也允许编辑),但是当您转到另一个控件时(即按下按钮时)焦点会丢失。

我认为对用户最友好的方法是在每个文本框旁边都有一个清除按钮,按下它会清除那个特定的文本框。为了使您的 UI 尽可能干净,按钮不应包含文本,而应包含图像。请查看this 了解有关执行此操作的更多详细信息。

另外,由于您有三个文本框,而且这个数字将来可能会增加,您可以考虑创建一个自定义控件,例如“ClearableTextBox”。该控件可以简单地具有一个 TextBox 和一个带有能够清除 TextBox 的图像的按钮。有关如何创建这样一个自定义控件(实际上是一个复合控件,因为您只是将标准控件放在一起)的更多信息可以找到here

【讨论】:

  • 它清除了所有 3,但是,我必须单击它 3 次才能这样做。另外,这是一个家庭作业,这就是教授希望我们清除它的方式。
  • @Paulie - 您展示的代码无法产生您描述的效果
  • @Igor 我知道,我做了一些更改,但仍然无法正常工作
【解决方案2】:

这是一种方法:

  1. 在表单中放置一个私有变量以记住最后一个 TextBox 被选中(又名专注)。
  2. 将您希望能够在“Enter”事件上执行“清除选定”的所有文本框连接起来。
  3. 当 enter 事件发生时,将私有变量的值设置为触发事件的发送者。
  4. 当您单击“清除选定项”时,只需对上次选择的项目调用 .Clear() 方法即可。

现在是一些代码:

public partial class MyForm : Form
{
    private TextBox _lastSelected = null;

    public MyForm()
    {
        InitializeComponent();

        textBox1.Enter += textBox_Enter;
        textBox2.Enter += textBox_Enter;
        textBox3.Enter += textBox_Enter;
    }

    private void buttonClearAll_Click(object sender, EventArgs e)
    {
        textBox1.Clear();
        textBox2.Clear();
        textBox3.Clear();
    }

    private void buttonClearSelected_Click(object sender, EventArgs e)
    {
        if (_lastSelected == null) return;

        _lastSelected.Clear();
    }

    private void textBox_Enter(object sender, EventArgs e)
    {
        _lastSelected = (TextBox)sender;
    }
}

【讨论】:

  • 对于您列出的 ClearAll,这是我第一次放置的内容,但没有成功。我不得不单击 ClearAllButton 3 次,因为它一次只清除一个。
  • 它适用于“清除焦点按钮”,而不是“清除所有”
  • @Paulie - 作为您在问题中发布的“全部清除”的替代方案,我建议您首先简单地列出您想要逐一清除的所有文本框项目。当我编写答案时,它对我来说效果很好。其他代码是否可能会影响您的 Clear All 方法的行为?俗话说,“让它工作,做对,让它快”。
  • 实际上是其他代码在干扰。我使用上面列出的代码让它工作,我必须做一些清理工作。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2014-01-10
  • 2013-12-06
  • 2012-10-24
相关资源
最近更新 更多