2014-05-09 2 views
1

이것은 간단한 질문 일 수 있습니다. 저는 C# (그리고 대부분의 프로그래밍)을 처음 접했고 두 개의 텍스트 상자로 구성된 프로그램을 만들려고합니다. 이 텍스트 상자의 정보는 자주 삭제되며 새로운 정보가 입력되어야하므로 신속해야합니다. 편의를 위해 Shift + Space를 사용하거나 클릭하지 말고 이전 텍스트 상자에서 백 스페이스 키를 다시 맞추려고합니다. 여기에 내가 가진 것이있다. 프로그램은 실행되지만 아래 코드는 내가 의도 한대로하지 않는 것 같습니다. TextBox2를 0 문자가와 백 스페이스 이후에 키가 때 백 스페이스를 사용하여 이전 텍스트 상자로 돌아 가기 (C#)

if (e.KeyCode == Keys.Back && textBox2.TextLength == 0) 
    textBox1.Focus(); 

그래서, 나는 TextBox1에 다시 이동을하고 싶습니다. 어떤 도움을 주셔서 감사합니다.

+0

그리고이 코드는 언제 실행됩니까? – Yahya

+0

@Yahya가 지적한대로, 어떤 경우에 그렇게 했습니까? 또한 그 코드에서 의도하는 * 것이지만 일어나지는 않습니까? 나는'TextChanged'로 그것을 할 것이고'textBox2.Text.Length == 0'만을 체크 할 것입니다. 이것은'textBox2' 콘텐츠가 * 변경되고 * 비어있는 모든 경우 (backspace, 모두 선택 및 삭제 등)에 초점을두고 'textBox1'로 이동합니다. – Sinatr

+0

KeyUp에서이 작업을 수행하고 있지만 TextChanged를 시도했습니다. textChanged에서 textBox2.Text.Length == 0 만 사용하면 백 스페이스를 한 번 누르면 텍스트 길이가 0이되고 커서는 즉시 textBox1로 이동합니다.textBox2에서 1 문자를 삭제하고 다시 입력해야하는 경우 고통입니다. 다시 textBox2로 이동하려면 탭을 눌러야합니다. textBox2에 문자가 1 개있는 경우 backspace를 두 번 누르면 textBox1로 되돌아 가려고합니다. 첫 번째는 필드를 지우고 두 번째는 커서를 textBox1로 이동합니다. – Natchey

답변

0

나는 마침내 작동하게 만들었습니다. 내가 한 일은 이전에 시도했던 것과 너무 다르지 않았지만 여기에 내가 어떻게했는지가 나와 있습니다.

  1. .cs [디자인]보기에서 두 개의 텍스트 상자를 만들었습니다.
  2. 각 상자를 선택하고 속성 아래의 "이벤트"번개 모양 아이콘을 클릭했습니다. 이것은 이것이 작동하지 않을 때 이전에 빠뜨린 것입니다.
  3. 둘 다 KeyPress 및 TextChanged로 설정합니다 (예 : textBox1_KeyPress & textBox1_TextChanged (textBox2와 동일한 작업을 수행 했음). 이것이 작동하는 이유 중 일부인지는 알 수 없습니다.
  4. I가 각각있는 EventArgs를 만든 각 텍스트 상자를 클릭 더블
  5. .이 내가 내 일반 코드를 저장 곳입니다.있는 EventArgs 외에도
  6. 내가 백 스페이스의 기능을 넣어 어디 수동 (아래 참조) KeyEventArgs를 생성 .
// Here is the KeyEventArgs I created using KeyPress (Public). 
: 여기에 코드입니다

공공 무효 textBox2_KeyPress (개체를 보낸 사람, KeyEventArgs 전자)

 { 

      if (e.KeyCode == Keys.Back && textBox2.Text.Length == 0) 
       textBox1.Focus(); 
     } 


// Here is where the rest of my code (Private). 

개인 무효 textBox2_TextChanged (개체를 보낸 사람, EventArgs입니다 E)

  { 
      if (textBox2.Text == "A") 
       richTextBox3.Text = "January"; 

      if (textBox2.Text == "B") 
       richTextBox3.Text = "February"; 

      if (textBox2.Text == "C") 
       richTextBox3.Text = "March"; 

// Code Continues... 

이 명확하지 않은 경우 죄송합니다. 나는 나중에 누군가를 돕기 위해 내가 한 일을 문서화하고 싶었다. 모두 도움을 주셔서 감사합니다.

+0

원래 질문을 편집하여 추가 정보를 추가하거나 주석을 사용하여 사람들과 작은 점을상의해야합니다. 질문에 답하지 않을 경우 답변을 사용하지 마십시오. – julealgon

3

이 작업을 수행하려면 KeyUp에서이 코드를 실행해야하지만이 작업을 수행하려면 복수 KeyUp 핸들러가 필요하지 않습니다. 이 KeyUp 핸들러를 고려

private void textBox_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    var textBox = sender as TextBox; 
    if (textBox == null) { return; } 

    if (e.KeyCode == Keys.Back && textBox.Text.Length == 0) 
    { 
     // this here of course being the Form 
     // Select causes the form to select the previous control in the tab order 
     this.Select(true, false); 
    } 
} 

지금 바로 에이 방식으로 작동 할 모든 텍스트 상자를이 핸들러를 첨부하고 모든 작업이 있습니다.

+0

이것은 아직 나를 위해 작동하지 않습니다. 단일 TextBox에 대해 EventArgs와 KeyEventArgs를 동시에 & 별도로 처리하는 것이 문제입니까? – Natchey

+1

@ user3620471 : 디자이너의 텍스트 상자를 두 번 클릭하지 마십시오. 컨트롤을 클릭하고, F4를 누르고, Events 탭으로 가서,'KeyUp' 이벤트를 더블 클릭하십시오. –

관련 문제