9 Stimmen

Wie konvertiere ich einen "Keys"-Enum-Wert in ein "int"-Zeichen in C#?

Dies scheint etwas zu sein, das einfach sein sollte, aber es fällt mir schwer, herauszufinden, was hier geschehen muss.

In der "KeyDown"-Eventhandler, wenn die "e.KeyValue" eine Zahl ist, möchte ich es als eine Zahl zu behandeln und speichern Sie es als eine int. Wenn ich also "8" auf dem Ziffernblock drücke, will ich nicht "Numpad8", sondern den int-Wert 8, den ich addieren oder subtrahieren kann oder was auch immer.

Also, wie konvertiere ich von der KeyValue zu einer int?

1voto

Samuel Punkte 36701

Könnten Sie einfach auf die KeyPress Ereignis statt? Es wird das Zeichen angezeigt, das tatsächlich gedrückt wurde.

1voto

John Rasch Punkte 60054

Diese Funktion wird das tun, was Sie wollen:

private int GetKeyValue(int keyValue)
{
    if (keyValue >= 48 && keyValue <= 57)
    {
        return keyValue - 48;
    }
    else if (keyValue >= 96 && keyValue <= 105)
    {
        return keyValue - 96;
    }
    else
    {
        return -1; // Not a number... do whatever...
    }
}

Sagen Sie es so:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    int num = GetKeyValue(e.KeyValue);  
}

0voto

Robin Day Punkte 97662

Der KeyValue stellt den Zeichencode für die gedrückte Taste dar. Um den numerischen Wert zu erhalten, müssen Sie das Zeichen für die gedrückte Taste finden und es dann von einem Zeichen in eine ganze Zahl umwandeln.

Etwas wie Convert.ToInt32(e.KeyCode.ToString())

0voto

salgo60 Punkte 957

Oder Sie erstellen eine Erweiterungsmethode und rufen sie auf wie

private void Form1_KeyDown(object sender, KeyEventArgs e)
{    
    int num = e.KeyValue.GetKeyValue();  
}

wobei die Erweiterungsmethode

public static class MyExtensions
{
    public static int GetKeyValue(this int keyValue)
    {

        if (keyValue >= 48 && keyValue <= 57)
        {
            return keyValue - 48;
        }
        else if (keyValue >= 96 && keyValue <= 105)
        {
            return keyValue - 96;
        }
        else
        {
            return -1; // Not a number... do whatever...    }

        }
    }
}

0voto

Carlos Ferreira Punkte 75

Ich habe diese 2 Zeilen einfachen Code verwendet:

string key = e.KeyCode.ToString();

if (key.Length > 1) key = key.Replace("NumPad", "").Replace("D", "");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X