2009-03-04 12 views
3

Bir tuşa basma olayım var ve giriş metinsel değilse, combobox'ın tuşa basmasını istiyorum. I.E. Yukarı veya aşağı tuş ise, combobox'ın normalde olduğu gibi ele almasına izin verin, ancak noktalama işareti ya da alfasayısal olarak hareket etmek istiyorum.Sadece bir KeyPress olayındaki metin girişinde harekete geçme

Char.IsControl (e.KeyChar)) hile yapar, ancak ok tuşlarını yakalamaz ve bir combobox için bu önemlidir.

cevap

2

Verdiğim önceki bir cevaptan aldığım bir örnek. Bu MSDN belgelerine geldi ve ben güzelce izin vermek veya vermemek istediğiniz karakterleri dayalı değiştirmek mümkün olmalıdır düşünüyorum:

// 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

olacak olsa uluslararası karakterlerle çalıştı? – Malfist

+0

@Malfist: Bu iyi bir soru ve kişisel olarak bilmiyorum. Uluslararası karakterler için yaptığınızı hayal edebileceğim tek şey, ilgileneceğiniz ASCII/Unicode değerlerine izin verecek veya bunlara izin vermeyecek başka bir kontrol gerçekleştirmektir. – TheTXI

0

Hiçbir metinsel karakterleri kontrol etmek gerekmez.

aşağıdaki kod yardımcı olur umarım:

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