Hallo Kollegen,
ich habe ein kleines Problem, welches sich mit der genauen Erkennung der vergangenen Tastendrücke auf der Tastatur befasst.
Das Problem ist folgendes:
Wenn ich die Funktion Form_KeyDown verwende, bekomme ich als Übergabe "KeyEventArgs e" angeboten und bei
Form_KeyPress "KeyPressEventArgs e".
Nun zu dem Punkt welchen ich aktuell nicht in einem Rutsch zu lösen schaffe:
- Mit KeyDown erkenne ich alle Tasten (auch F1 z.B.), bekomme diese jedoch immer nur Groß übergeben (z.B. wird ein einfaches "i" zu einem "I").
**Klar kann ich dies über die Propertey e.Shift abfragen und dann daraus ein var.ToLower machen, setzt mir aber aus einem "F1" ein "p" um :-/
- Verwende ich nun KeyPress bekomm ich die Buchstaben casesensitive übergeben (das was ich benötige), aber auf "F1" usw wird nicht mehr reagiert...
Vielleicht kann mir ja jemand von euch eine Lösung nennen, mit der beides geht?
Und hier zur belustigung mein Code (auf Spaß umgeschrieben):
[highlight=csharp]
#region just for fun
private string _lastKeys = "";
private readonly Dictionary<string, string[]> _keyChecker = new Dictionary<string, string[]>
{
// key code to press, msgbox header, msgbox text or
// key code to press, switch to function execute, function to execute
{"iddqd", new[] {"Cheater! :-)", "Godmode activated!"}},
{"idkfa", new[] {"Cheater! :-)", "All Weapons unlocked!"}},
{"aAa", new[] {"Testing", "Test!"}},
{"aaa", new[] {"function", "close"}}
};
private void KeyChecker(KeyPressEventArgs e)
{
_lastKeys += e.KeyChar;
foreach (var key in _keyChecker.Keys)
if (_lastKeys.EndsWith(key))
{
if (_keyChecker[key][0] != "function")
MessageBox.Show(_keyChecker[key][1], _keyChecker[key][0]);
else
KeyCheckerFunction(_keyChecker[key][1]);
_lastKeys = "";
}
while (_lastKeys.Length > 100)
_lastKeys = _lastKeys.Substring(1);
}
private void KeyCheckerFunction(string func)
{
switch (func)
{
case "close":
Close();
break;
}
}
private void FormMain_KeyPress(object sender, KeyPressEventArgs e)
{
KeyChecker(e);
}
#endregion just for fun
private void FormMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 112)
{
Close();
} // F1
}
[/highlight]
ich habe ein kleines Problem, welches sich mit der genauen Erkennung der vergangenen Tastendrücke auf der Tastatur befasst.
Das Problem ist folgendes:
Wenn ich die Funktion Form_KeyDown verwende, bekomme ich als Übergabe "KeyEventArgs e" angeboten und bei
Form_KeyPress "KeyPressEventArgs e".
Nun zu dem Punkt welchen ich aktuell nicht in einem Rutsch zu lösen schaffe:
- Mit KeyDown erkenne ich alle Tasten (auch F1 z.B.), bekomme diese jedoch immer nur Groß übergeben (z.B. wird ein einfaches "i" zu einem "I").
**Klar kann ich dies über die Propertey e.Shift abfragen und dann daraus ein var.ToLower machen, setzt mir aber aus einem "F1" ein "p" um :-/
- Verwende ich nun KeyPress bekomm ich die Buchstaben casesensitive übergeben (das was ich benötige), aber auf "F1" usw wird nicht mehr reagiert...
Vielleicht kann mir ja jemand von euch eine Lösung nennen, mit der beides geht?
Und hier zur belustigung mein Code (auf Spaß umgeschrieben):
[highlight=csharp]
#region just for fun
private string _lastKeys = "";
private readonly Dictionary<string, string[]> _keyChecker = new Dictionary<string, string[]>
{
// key code to press, msgbox header, msgbox text or
// key code to press, switch to function execute, function to execute
{"iddqd", new[] {"Cheater! :-)", "Godmode activated!"}},
{"idkfa", new[] {"Cheater! :-)", "All Weapons unlocked!"}},
{"aAa", new[] {"Testing", "Test!"}},
{"aaa", new[] {"function", "close"}}
};
private void KeyChecker(KeyPressEventArgs e)
{
_lastKeys += e.KeyChar;
foreach (var key in _keyChecker.Keys)
if (_lastKeys.EndsWith(key))
{
if (_keyChecker[key][0] != "function")
MessageBox.Show(_keyChecker[key][1], _keyChecker[key][0]);
else
KeyCheckerFunction(_keyChecker[key][1]);
_lastKeys = "";
}
while (_lastKeys.Length > 100)
_lastKeys = _lastKeys.Substring(1);
}
private void KeyCheckerFunction(string func)
{
switch (func)
{
case "close":
Close();
break;
}
}
private void FormMain_KeyPress(object sender, KeyPressEventArgs e)
{
KeyChecker(e);
}
#endregion just for fun
private void FormMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 112)
{
Close();
} // F1
}
[/highlight]
Comment