Combobox nur Zahlen eingeben

LissiOne

Grünschnabel
Hallo zusammen,

ich will, dass man in eine Combobox nur Zahlen eingeben kann.
Mit den beiden folgenden Methoden funktioniert es nicht.
Methode 1: (static nur weil es aus einer helper klasse ohne instanz kommt)
Code:
		// ob ein nicht numerisches Zeichen eingegeben wurde
		static bool nonNumberEntered = false;

		// Keydown_event um rauszufinden, welche Taste gedrückt wurde
		public static void numbersOnlyCB_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			nonNumberEntered = false;

			//Zahl (oberer Teil des Keyboards)
			if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
			{
				//Zahl aus "Num" Bereich
				if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
				{
					if(e.KeyCode != Keys.Back)
					{
						if(e.KeyCode !=Keys.Delete)
						{
							//eine nicht erlaubte Taste wurde gedrückt
							nonNumberEntered = true;
						}
					}
				}
				
			}
			else if(e.Shift)
			{
				nonNumberEntered = true;
			}
		}


		//Event nach KeyDown Event, verwendet zum blocken der Eingabe eines unerlaubten Zeichens 
		public static void numbersOnlyCB_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
		{
			if (nonNumberEntered == true)
			{
				//das Zeichen kann nicht eingegeben werden
				e.Handled = true;
			}
		}

Methode 2:

Code:
// KeyPress Event der Textbox
		public static void numbersOnly_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
		{
			if(!IsValidNumber(e.KeyChar.ToString()))
				e.Handled = true;
		}

		private static bool IsValidNumber(string s)
		{
			string[] arr = new string[]{"1","2","3","4","5","6","7","8","9"};

			for(int i = 0; i < arr.Length; i++)
			{
				if(arr[i] == s.ToLower())
				{
					return true;
				}
			}
			return false;
		}

Beides funktioniert bei Textboxes einwandfrei,
danke für eure Hilfe!
 
Oh mein Gott!

Alle was Du brauchst ist

Code:
ComboBox.Validating
und
Code:
regex = new System.Text.RegularExpressions.Regex( "([0-9])" );
match = regex.Match( ComboBox.Text.Substring(ComboBox.Text.Length -1, 1 ));

	if ( !match.Success ){
		MessageBox.Show(
			"Es dürfen keine Zahlen eigegeben werden!",
			"Ungültiges Zeichen!",
			MessageBoxButtons.OK, MessageBoxIcon.Information);

		ComboBox.Text = ComboBox.Text.Substring(0,ComboBox.Text.Length -1);
		ComboBox.SelectionStart = ComboBox.Text.Length;
		ComboBox.Focus();

MFG cosmo
 
Vielen Dank erstmal :-)
Muss ich dann an die ComboBox einen CancelEventHandler anhängen? Oder was meinst du mit ComboBox.Validating?
 
Validating ist ein Event welches ausgelöst wird wenn sich der Text in deiner ComboBox verändert hat.
Code:
ComboBox.Validating += new CancelEventHandler(ComboBox_Validating);

Das steht übrigens alles in der MSDN. :-)

MFG cosmo
 
Hmm der Code ist doch etwas buggy...

klick mal rein in das Feld und danach wieder raus, ohne etwas einzugeben... rums...

Was ich bei dieser Lösung auch nicht optimal finde ist, dass nicht direkt nach der Eingabe geprüft wird
 
Zurück