通过箭头键在winforms中导航

时间:2017-09-24 21:03:06

标签: c#

private void PositionCursor(object sender, PaintEventArgs e)
{
    Font arialBold = new Font("Arial", 14.0F);
    if (trigger)
    {
    TextRenderer.DrawText(e.Graphics, ("X"), arialBold,
         new Point(x * 20 - 4, y * 20 - 2), Color.Red);
        trigger = false;
    }
}
private void MoveCursor(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
            y--;
            break;
        case Keys.Left:
            x--;
            break;
        case Keys.Down:
            x++;
            break;
        case Keys.Right:
            y++;
            break;
    }
    trigger = true;
}

您好,

我正试图通过x和y坐标在winforms应用程序中导航“X”。我还尝试使用ProcessCmdKey方法而不是KeyEventArgs的MoveCursor方法。在这两种情况下,切换操作都可以正常工作。如果我通过MessageBox显示x和y值,则值会正确更改。但是当按下一个键时我没有触发PaintEvent,我找不到我的思维错误。请帮我。 谢谢!

2 个答案:

答案 0 :(得分:1)

this post中共享时,您应该在MoveCursor末尾添加对表单的Invalidate方法的调用:

private void MoveCursor(object sender, KeyEventArgs e)
{
    // ...
    trigger = true;
    this.Invalidate();
}

答案 1 :(得分:0)

当您在光标应更新的对象Invalidate上调用((Control)sender).Invalidate()时,它应在片刻后重新绘制。可能在MoveCursor方法结束时。

然后你必须将PositionCursor挂钩到Paint Control的事件(你可能已经做过)