0

所以这就是问题所在。我正在使用 keyDown 事件将 bool 设置为 true - 只要它为 true,mouseMove 事件就会在图片框上绘制。本质上是一个绘图程序。问题是,只要我按住绘图按钮,bool 似乎会打开和关闭,我会得到一个奇怪的条纹结果(参见示例图片中的蓝线)。bool 没有在代码中关闭,所以我不知道是什么原因造成的(好吧,它被关闭了,但我禁用了那部分代码,但问题仍然存在)。

有任何想法吗?

编辑:这是一些代码。我省略了 keyUp 事件,因为我可以禁用它但仍然遇到同样的问题。更有趣的是,如果我松开键盘按钮,我会得到一条实线,但只要我按住按钮,它就可以正常工作大约一秒钟,然后开始做条纹的事情(类似于你按住的时候)文本中的一个按钮 - 它稍等片刻,然后开始重复字符)。

private void Main_KeyDown(object sender, KeyEventArgs e)
    {
        string clicked = e.KeyData.ToString().ToLower(); // I'm comparing the clicked key to make sure the right button is clicked (there's a controls changing system)
        cursorLocation = pictureBox1.PointToClient(System.Windows.Forms.Cursor.Position);

        if (clicked == ctkey && MapLoaded)
        {
                readyForDraw();
                pen = new Pen(Color.DodgerBlue, penSize);
        }
        else if (clicked == tkey && MapLoaded)
        {
                readyForDraw();
                pen = new Pen(Color.Red, penSize);
        }
        else if (clicked == neutralkey && MapLoaded)
        {
                readyForDraw();
                pen = new Pen(neutralColour, penSize);
        } 
    } 

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDrawing && MapLoaded && addPlayerMode == false)
        {
            g.DrawLine(pen, cursorLocation, e.Location);
            pictureBox1.Invalidate();
            pictureBox1.Image = mainBitmap;

            cursorLocation = pictureBox1.PointToClient(System.Windows.Forms.Cursor.Position);
        } 
    }   

private void readyForDraw()
    {
        g = Graphics.FromImage(mainBitmap);            
        isDrawing = true;
        saveBackup();
    }      

示例图片。使用 MouseDown 事件绘制红色 - 工作正常。蓝色是 keyDown 事件,已损坏。

http://imgur.com/r8AHlh0

4

1 回答 1

0

像这样使用WPF中的Keyboard.GetKeyStates

public static bool IsDown(Key key) {
  return Keyboard.GetKeyStates(key) & KeyStates.Down != 0;
}

即使您的应用程序是 WinForms 而不是 WPF,它也应该可以正常工作。(从您的项目中引用 PresentationCore.dll)

于 2013-02-24T21:06:47.023 回答