0

Control.ModifierKeys我在这个线程中了解到这个线程,以及FileSystemWatcher 这里和一个 FileSystemWatcher 特定的解决方法中了解了这里。但是,当我将两者结合起来时,我遇到了一个奇怪但可以解释的错误。至少,我有一个假设。

我的表单使用 aFileSystemWatcher来检测文件的更改并在触发时运行某些内容。Ctrl但是,它运行的东西有点分散注意力和浪费时间,所以如果保存是通过+完成的S,即按住 Control 键时,我试图让它跳过运行。

代码是这样的:

private void onFileChanged(object source, FileSystemEventArgs e)
{
    // The try/finally blocks prevent double raising of the changed event
    try
    {
        myFileWatcher.EnableRaisingEvents = false;
        if ((ModifierKeys & Keys.Control) != 0)
            MessageBox.Show("Control held down!");
        else
        {
            MessageBox.Show("Running stuff!");
        }
    }
    finally
    {
        myFileWatcher.EnableRaisingEvents = true;
    }
}

所以这一切都很好,注意这两个MessageBox.Show调用替换了块内代码。在正常使用情况下,它可以工作。但是,从文件保存到触发onFileChanged. 如果在触发Ctrl之前释放该键onFileChanged,即如果您非常快速地点击Ctrl+ S,则会产生非常奇怪的行为。Ctrl一方面,显然没有检测到 Control 键,但是从这里开始,即使您在+之后按住 Control 键S直到弹出窗口显示,ModifierKeys仍然会为 0 并且它会认为Ctrl没有被按住。然后,如果您在单击弹出窗口中的“确定”时按住不放,即使您转到“文件”->“保存”它正在观看的文件,也会Ctrl突然继续触发 Control 键。ModifierKeys

有没有办法解决这个错误,或者我是否必须将其标记为无法修复并告诉我的用户将 Control 键按住的时间比通常情况下要长以避免这个错误?

4

1 回答 1

0

我会尝试设置一个全局键盘钩子并记录是否仍然按下Ctrl+或在触发 filewatcher 事件之前的特定时间内按下 +。S

于 2013-09-19T20:00:07.373 回答