所以我想製作一個方法來讀取keypress事件,然後將擊鍵記錄到一個字符串中。這個想法是,該字符串包含前面的「R」或「L」,後跟2個整數。但是,當我在MoveBox方法中顯示「MoveDist」字符串變量時,它總是按相同的按鍵重複3次,而不是在每次筆畫後重新輪詢鍵盤。例如,當我運行調試並輸入「R」時,程序崩潰,因爲輸入字符串立即變爲「rrr」。任何人都有解決方案?在按鍵事件閱讀多個鍵?
void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
String input = "";
if (e.KeyChar == 108)
{
input = "l";
}
else if (e.KeyChar == 114)
{
input = "r";
}
else if (e.KeyChar >= 48 && e.KeyChar <= 57)
{
int charPress = e.KeyChar - 48;
input = input + charPress.ToString();
}
Form1_MoveBox(input);
}
void Form1_MoveBox(String newInput)
{
String input = "";
while (input.Length <= 3)
{
input = input + newInput;
}
String moveDist = input.Substring(1, 3);
MessageBox.Show(moveDist);
int distance = Int32.Parse(moveDist);
if (input.Substring(0, 1) == "l")
{
int x = panel1.Location.X - distance;
int y = panel1.Location.Y;
panel1.Location = new Point(x, y);
panel1.Visible = true;
}
else if (input.Substring(0, 1) == "r")
{
int x = panel1.Location.X + distance;
int y = panel1.Location.Y;
panel1.Location = new Point(x, y);
panel1.Visible = true;
}
這段代碼有很多bug。通過在KeyPress事件處理程序之外移動* input *變量來開始修復它,以便在按鍵之間保留其值。花時間練習使用調試器,以便您自己診斷這些類型的錯誤。 – 2014-11-03 08:57:58