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

C# 如果我键入其他文本框,则取消文本框,c#,textbox,C#,Textbox,我的表格里只有几个文本框。我想输入一个文本框,其他文本框将自动取消(取消,用户将无法再在其他文本框中输入)。 如果用户删除他在文本框中键入的单词(或者换句话说:如果文本框为空),所有其他文本框将再次启用 以下是我到目前为止得到的信息: private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text.Trim().Length > 0) {

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

以下是我到目前为止得到的信息:

    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 textbox中键入时,如何禁用其他文本框?(同时保持组合框处于启用状态)


注意:我想在textBox2(当我键入textBox2时,TextBox1和textBox3将被禁用)和textBox3上也这样做。

使用
控件
收集和一些
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;
}
if(textBox1.Text.Trim().Length>0)
{ 
var textboxs=this.Controls.OfType()。其中(x=>x.Name!=“textBox1”);
foreach(文本框中的变量tBox)
tBox.Enabled=false;
}

您不需要对“else-if”设置条件,只需要“else”即可,就好像长度大于0一样,唯一的可能性是0。您还可以使用发送方,而不是硬编码控件名称

然后为要禁用的文本框设置Enabled属性。您可以循环浏览表单上的所有文本框,不包括您正在键入的文本框,或者手动列出它们。更简单的方法是将文本框放在groupbox中,如果禁用groupbox,它将禁用其中的控件

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;
}
但对于大量textbox,另一种选择是让多个textbox共享同一个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;
}
private void TextBoxGroup\u TextChanged(对象发送方,事件参数e)
{
var groupOrder=new List(){textBox1,textBox2,textBox3,textBox4};
var senderTextBox=(TextBox)sender;
var senderIndex=groupOrder.IndexOf(senderTextBox);
var isTextEmpty=senderTextBox.Text.Trim();
如果(senderIndex!=0)groupOrder[senderIndex-1].Enabled=isTextEmpty;
如果(senderIndex!=groupOrder.Count-1)groupOrder[senderIndex+1]。Enabled=!isTextEmpty;
}

谢谢,不过您忘了添加tBox.Enabled=true;空if语句上的代码。我使用else if在textBox2上执行相同的操作(并且textBox1和3将被禁用),但它没有工作,为什么?因为条件
x.Name!=“textBox1”
那么我如何修复它呢?它可以工作,但假设我想使用textbox2并禁用1和3,我需要那个if语句。。如何将您的代码放入if语句中?更新了我的答案,这可能会有所帮助。再次更新后,回顾我的答案,意识到文本框控件列表可能是一个更干净的解决方案。顺便说一句,这听起来非常糟糕。请不要这样做。你也没有注意到你正在使用什么UI技术。如果您使用的是WPF,那么您的做法将与使用WinForm时有所不同,如果您在WebForm或MVC中这样做,那么实际上您将使用Javascript实现这一点。