Announcement

Collapse
No announcement yet.

Wie finde ich raus, ob Feststelltaste aktiviert ist

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie finde ich raus, ob Feststelltaste aktiviert ist

    Hi!
    Ich hab eine Frage und zwar fange ich derzeit mittels der KeyDown- und KeyPress- Events ab, ob ein falsches Zeichen eingegeben wurde oder nicht.
    Es handelt sich um eine TextBox in der nur Zahlen eingegeben werden dürfen. Derzeit sieht mein Code folgendermaßen aus:

    Code:
            private void textBox_IP_KeyDown(object sender, KeyEventArgs e)
            {
                // Initialize the flag to false.
                _boolIpChar = 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.
                            _boolIpChar = true;
                        }
                    }
                }
                if (e.Shift)
                {
                    _boolIpChar = true;
                }
            }
    
            private void textBox_IP_KeyPress(object sender, KeyPressEventArgs e)
            {
                // Check for the flag being set in the KeyDown event.
                if (_boolIpChar == true)
                {
                    // Stop the character from being entered into the control since it is non-numerical.
                    e.Handled = true;
                }
            }
    Wenn ich nun eine reguläre Zahl eingebe sagen wir 1, dann schreibt er mir diese in die TextBox.
    Wenn ich aber die 1 in Kombination mit Shift drücke, ignoriert er die Eingabe.
    Dies ist auch korrekt so.

    Meine Frage ist aber nun, wie kann ich rausfinden, ob die FESTSTELLTASTE gedrückt wurde und somit bei einer Eingabe von 1 ein ! geschrieben werden würde. Weil hier muss diese ja nicht wie die Shifttaste weiterhin gedrückt werden.

    Es gibt doch bestimmt eine Möglichkeit abzufragen ob CAPSLOCK aktiviert ist oder nicht.

  • #2
    Hallo,

    Also in KeyDown bekommst du das nicht mit, glaube ich!

    Ich würde allerdings für eine numerische TextBox, auch das KeyPress event verwenden.
    Dieses gibt dir gleich das "Richtige" Char.
    In einer von TextBox abgeleiteten Klasse, könntest du folgenden code verwenden.
    Code:
    const string validinput = "1234567890";
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
    	if (validinput.IndexOf(e.KeyChar) < 0)
    	{
    		e.Handled = true;
    	}
    	base.OnKeyPress (e);
    }
    Das funktioniert auch wenn du die Feststelltaste gedrückt hast.
    Grüße,

    Martin

    Comment


    • #3
      Mh, stimmt, da hab ich das wohl ein wenig umständlich gemacht, so ist das natürlich wesentlich einfacher, da hast du recht.
      Jetzt klappt es soweit.

      1 Frage hätte ich noch.

      1. Wofür ist die Zeile base.OnKeyPress (e); ?

      Wenn ich die weglasse klappt es genauso, sehe da keinen Unterschied!?


      Vielen Dank für die Hilfe!

      Comment


      • #4
        Hallo,

        In diesem Fall hat es keine Auswirkungen, das stimmt.
        Du solltest die methode der basis Klasse dennoch immer aufrufen, um zu gewährleisten, daß auch alle von MS implementierten Funktionalitäten ausgeführt werden.

        Freue mich wenn es dir geholfen hat!
        Grüße,

        Martin

        Comment


        • #5
          Achso, ok, vielen Dank an dich!
          Jetzt hab ich schonmal ein Problem weniger

          Comment

          Working...
          X