我在C#中移动按钮时遇到问题。我想了这么多次。我还没弄清楚我的代码有什么问题。如果你们能找出我的错误在哪里,请帮助我。非常感谢你。
这是我按下箭头键时应该移动按钮的方法。
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyValue == 39)
{
button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
}
else if (e.KeyValue == 37)
{
button1.Location = new Point(button1.Location.X - 1, button1.Location.Y);
}
}
答案 0 :(得分:2)
问题是箭头键是一种由控件自动处理的特殊键。因此,您可以通过以下方式之一处理按箭头键:
第一种方式:
我建议您在不处理任何ProcessCmdKey
事件的情况下使用key
:
public Form1()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Left)
{
pad.Location = new Point(pad.Location.X - 1, pad.Location.Y);
return true;
}
else if (keyData == Keys.Right)
{
pad.Location = new Point(pad.Location.X + 1, pad.Location.Y);
return true;
}
else if (keyData == Keys.Up)
{
return true;
}
else if (keyData == Keys.Down)
{
return true;
}
else
return base.ProcessCmdKey(ref msg, keyData);
}
第二种方式:
但是,如果您想使用事件来解决此问题,则可以使用KeyUp
事件代替KeyDown
事件。
public Form1()
{
InitializeComponent();
this.BringToFront();
this.Focus();
this.KeyPreview = true;
this.KeyUp += new KeyEventHandler(Form1_KeyUp);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == 39)
{
pad.Location = new Point(pad.Location.X + 1, pad.Location.Y);
}
else if (e.KeyValue == 37)
{
pad.Location = new Point(pad.Location.X - 1, pad.Location.Y);
}
}
答案 1 :(得分:0)
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 39)
{
button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
}
else if (e.KeyValue == 37)
{
button1.Location = new Point(button1.Location.X - 1, button1.Location.Y);
}
}
试试这个