我的表单中有几个文本框。我想输入一个文本框,其他文本框将自动取消(取消,因此用户将无法再在其他文本框中键入)。 如果用户删除了他在文本框中输入的单词(换句话说:如果文本框为空),则将再次启用所有其他文本框。
这是我到目前为止所得到的:
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.
}
}
如何在输入priteillar文本框时禁用其他文本框? (还保持启用comboBox)。
DO注意:我想在textBox2上做同样的事情(当我输入textBox2时,文本框1和3将被禁用)和textBox3。
答案 0 :(得分:1)
使用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;
}
答案 1 :(得分:1)
你在'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;
}