如果我键入其他文本框,则取消文本框

本文关键字:文本 取消 其他 如果 | 更新日期: 2023-09-27 18:28:38

我的表单中有几个文本框。我想输入一个文本框,其他文本框将自动取消(取消,用户将无法再在其他文本框中输入)。如果用户删除了他在文本框中键入的单词(或者换句话说:如果文本框为空),所有其他文本框都将再次启用。

到目前为止,我得到的是:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Trim().Length > 0)
        {
            // Disable other textboxes (I have no idea how can I do that).
        }
        else if (textBox1.Text.Trim().Length == 0)
        {
            // Enable other textboxes
        }
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Trim().Length > 0)
        {
            // Keep this comboBox enabled while typing in textBox1.
        }
    }

在priticillar文本框中输入时,如何禁用其他文本框?(同时保持comboBox处于启用状态)。

注意:我想对textBox2(当我键入textBox2时,textbox1和3将被禁用)和textBox3执行同样的操作。

如果我键入其他文本框,则取消文本框

您不需要'else-if'上的条件,只要'else'就可以了,就好像长度大于0一样,唯一的其他可能性是0。您也可以使用发送方,而不是硬编码控件名称。

然后为要禁用的文本框设置Enabled属性。您可以循环浏览表单上的所有文本框,不包括您正在键入的文本框,也可以手动列出它们。SImpler将文本框放在一个组框中,然后如果您禁用组框,它将禁用其中的控件。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var senderTextBox    = (TextBox)sender;
    var textBoxesEnabled = senderTextBox.Text.Trim().Length == 0;
    textBox2.Enabled = textBoxesEnabled;
    textBox3.Enabled = textBoxesEnabled;
    // OR
    groupBox1.Enabled = textBoxesEnabled;
}

回复编辑:你可以链接文本框,比如说其中4个,禁用最后3个,然后:

void TextBox1TextChanged(object sender, System.EventArgs e)
{
    var isTextEmpty  = ((TextBox)sender).Text.Trim() == "";
    textBox2.Enabled = !isTextEmpty;
}
void TextBox2TextChanged(object sender, System.EventArgs e)
{
    var isTextEmpty  = ((TextBox)sender).Text.Trim() == "";
    textBox1.Enabled = isTextEmpty;
    textBox3.Enabled = !isTextEmpty;
}
void TextBox3TextChanged(object sender, System.EventArgs e)
{
    var isTextEmpty  = ((TextBox)sender).Text.Trim() == "";
    textBox2.Enabled = isTextEmpty;
    textBox4.Enabled = !isTextEmpty;
}
void TextBox4TextChanged(object sender, System.EventArgs e)
{
    var isTextEmpty  = ((TextBox)sender).Text.Trim() == "";
    textBox3.Enabled = isTextEmpty;
}

但对于大量的文本框,另一种选择是让多个文本框共享同一个TextChanged事件。您需要单击每个TextBox控件,进入事件列表并手动选择TextChanged的方法。方法如下:

private void TextBoxGroup_TextChanged(object sender, EventArgs e)
{
    var groupOrder    = new List<TextBox>() { textBox1, textBox2, textBox3, textBox4 };
    var senderTextBox = (TextBox)sender;
    var senderIndex   = groupOrder.IndexOf(senderTextBox);
    var isTextEmpty = senderTextBox.Text.Trim() == "";
    if (senderIndex != 0) groupOrder[senderIndex - 1].Enabled = isTextEmpty;
    if (senderIndex != groupOrder.Count - 1) groupOrder[senderIndex + 1].Enabled = !isTextEmpty;
}

使用Controls集合和一些LINQ:

if (textBox1.Text.Trim().Length > 0)
{ 
     var textboxes = this.Controls.OfType<TextBox>().Where(x => x.Name != "textBox1");
     foreach(var tBox in textboxes)
         tBox.Enabled = false;
}