2014-11-01 3 views
0

양식에 텍스트 상자가 거의 없습니다. 하나의 텍스트 상자에 입력하고 다른 텍스트 상자는 자동으로 취소됩니다 (사용자가 다른 텍스트 상자에 더 이상 입력 할 수 없도록 취소됨). 사용자가 텍스트 상자에 입력 한 단어를 삭제하면 (즉, 텍스트 상자가 비어있는 경우) 다른 모든 텍스트 상자가 다시 활성화됩니다. priticillar 텍스트 상자에 입력하는 동안다른 텍스트 상자에 입력 한 경우 텍스트 상자 취소

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. 
     } 
    } 

이 어떻게 다른 텍스트 상자를 비활성화 할 수 있습니다 : 여기

는 내가 지금까지 가지고 무엇인가? (또한 comboBox를 활성화 상태로 유지).

DO주의 사항 : textBox2 (textBox2를 입력하면 텍스트 상자 1과 3이 비활성화 됨) 및 textBox3에서 동일한 작업을 수행하려고합니다.

+0

BTW 이것은 완전히 끔찍한 UX로 들립니다. 제발 하지마. – Aron

+0

또한 어떤 UI 기술을 사용하고 있는지 메모하지 않습니다. WPF를 사용하는 경우 WinForm을 사용한 경우와 다르게 수행하고 WebForm 또는 MVC에서이 작업을 수행하는 경우 Javascript를 사용하여 실제로이 작업을 수행 할 수 있습니다. – Aron

답변

1

당신은, 단지 '다른'할 것이다, 당신의 '만약 다른'에서 만 조건이 필요하지 않습니다 다른 가능성은 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; 
} 

REPLY 편집 : 당신은 텍스트 상자의 체인, 다음, 그 중 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; 
} 
+0

작동하지만 textbox2를 사용하고 1과 3을 사용하지 않도록 설정할 수 있습니다. if 문이 필요합니다. if your code into if 성명서? – ExCluSiv3

+0

도움이 될 수있는 답변을 업데이트했습니다. – WhoIsRich

+0

다시 업데이트하여 내 대답을 되돌아보고 TextBox 컨트롤 목록이 더 깨끗한 솔루션이 될 수 있음을 깨달았습니다. – WhoIsRich

1

사용 Controls 수집 및 일부 LINQ : 길이가 0보다 인 것처럼

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; 
} 
+0

감사합니다. tBox.Enabled = true를 추가하는 것을 잊었습니다. 빈 if 문에 코드를 작성하십시오. – ExCluSiv3

+0

textBox2에서 동일한 작업을 수행하려면 else를 사용하고 textBox1과 3을 사용하지 않도록 설정하면 작동하지 않습니다. 이유가 무엇입니까? – ExCluSiv3

+0

왜냐하면'x.Name! = "textBox1"' –

관련 문제