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 键按住的时间比通常情况下要长以避免这个错误?