按F9我将文件发送到打印机,有没有办法检测用户点击该键的次数,
因为我想只允许一个Key Down
打印,我知道有MouseButtonEventArgs.ClickCount属性
对于C#中的按钮,所以我可能会做的很简单;
if (e.ClickCount == 1)
{
// Single Click occurred.Do something
}
但Key Downs有什么用?
所以我的问题是:
我怎么能限制用户一次只按一次,因为我不希望有用户的情况
垃圾邮件F9并将大量文件发送到打印机..
或者我可以通过自己的button event handler
创建并在那里移动我的逻辑,
在按键时,我可以调用button event click
方法,在里面我可以计算点击次数?
答案 0 :(得分:1)
我怎么能限制用户一次只按一次,因为当用户发送垃圾邮件F9并向打印机发送大量文件时我不希望出现这种情况
您需要定义“时间”实际意味着什么,即您是否希望用户能够每秒点击一次或每两秒点击一次或其他任何内容。
您可以通过定义TimeSpan
字段并将当前时间与最后一次按键时间之间的差异与此值的值进行比较,例如:
readonly static TimeSpan ts = TimeSpan.FromSeconds(1); //allow printing once per (1) second
DateTime lastKeyPress;
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.F9 && DateTime.Now.Subtract(lastKeyPress) >= ts)
{
//print...
}
lastKeyPress = DateTime.Now;
}
答案 1 :(得分:0)
你必须自己计算次数。
因为你想知道按钮被按下一次,
你不必用int
保存它,你可以简单地bool
。
声明:
private static bool alreadyPrint = false;
在keyDown事件中:
alreadyPrint = true;
答案 2 :(得分:0)
如果您必须做一些与事件无关的事情,您应该查看Reactive Extensions。以下是Rx简介:link。
使用Rx,您可以将事件视为数据流。例如,如果您有一个Observable
,您可以在其中输入F9事件,并且只想在最后400毫秒内按F9一次打印文档,您可以执行以下操作:
F9Observable.ObserveOn(Scheduler.Default)
.Throttle(TimeSpan.FromMilliseconds(400))
.Do(_ => Print())
如果有人会经常按F9,则文件在停止之前不会被打印。