2009-03-04 13 views
3

키 누름 이벤트가 있으며 입력이 텍스트가 아닌 경우 키 누름을 처리하도록 콤보 상자에 넣으려고합니다. I.E. 그것이 위로 또는 아래로 키라면, 콤보 상자가 평소처럼 그것을 처리하게하십시오. 그러나 그것이 구두점이거나 영숫자 인 경우, 나는 그것을 수행하고 싶습니다.KeyPress 이벤트의 텍스트 입력에만 적용됩니다.

저는 Char.IsControl (e.KeyChar))은 속임수를 쓰지만, 화살표 키를 잡지 않으며, 콤보 박스의 경우 중요합니다.

답변

2

다음은 내가 이전에 대답 한 예입니다. 그것은 MSDN 문서에서 와서 나는 당신이 잘 허용하거나 허용 할 문자에 따라 수정할 수 있어야한다고 생각 :

// Boolean flag used to determine when a character other than a number is entered. 
private bool nonNumberEntered = false; 

// Handle the KeyDown event to determine the type of character entered into the control. 
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Initialize the flag to false. 
    nonNumberEntered = false; 

    // Determine whether the keystroke is a number from the top of the keyboard. 
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) 
    { 
     // Determine whether the keystroke is a number from the keypad. 
     if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) 
     { 
      // Determine whether the keystroke is a backspace. 
      if(e.KeyCode != Keys.Back) 
      { 
       // A non-numerical keystroke was pressed. 
       // Set the flag to true and evaluate in KeyPress event. 
       nonNumberEntered = true; 
      } 
     } 
    } 
    //If shift key was pressed, it's not a number. 
    if (Control.ModifierKeys == Keys.Shift) { 
     nonNumberEntered = true; 
    } 
} 

// This event occurs after the KeyDown event and can be used to prevent 
// characters from entering the control. 
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Check for the flag being set in the KeyDown event. 
    if (nonNumberEntered == true) 
    { 
     // Stop the character from being entered into the control since it is non-numerical. 
     e.Handled = true; 
    } 
} 
+0

것이지만 국제 문자와 그 일? – Malfist

+0

@Malfist : 그것은 좋은 질문이며 개인적으로는 알지 못합니다. 내가 국제적인 문자를 사용하는 것을 상상할 수있는 유일한 방법은 관심있는 ASCII/유니 코드 값을 허용하거나 거부하는 다른 검사를 수행하는 것입니다. – TheTXI

0

당신은 어떤 텍스트 문자를 확인하지 할 필요가 없습니다.

나는 다음과 같은 코드가 도움이되기를 바랍니다 :

void ComboBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(Char.IsNumber(e.KeyChar)) 
     ... 
    else if(Char.IsLetter(e.KeyChar)) 
     ... 
}