Csharp/C#教程:如何订阅双击?分享


如何订阅双击?

我正试图找到一种方法来订阅XNA中的双击事件,谷歌搜索获取winforms相关的东西,但事实并非如此,我不能使用它。

使用Timespan并猜测双击超时在PC上的时间并不可靠。

默认的XNA输入系统也有这个小缺陷:有时候按键或鼠标点击会在更新之间丢失,这会在游戏的高负载时刻破坏双击可靠性。

如何订阅.net中的双击事件?


删除了“不使用Control类事件”,因为实际上有一种方法可以使用该类(请参阅我的回答)。

您可以按照本文中的说明创建自己的双击检查器。

 double ClickTimer; const double TimerDelay = 500; public override void Update(GameTime gameTime) { ClickTimer += gameTime.ElapsedGameTime.TotalMilliseconds; if(Mouse.GetState().LeftButton == ButtonState.Pressed) { if(ClickTimer < TimerDelay) //this is a double click else //this is a normal click ClickTimer = 0; } } 

在该代码中, 500被设置为用户必须双击的最长时间(以毫秒为单位)。 要获取用户设置为系统最大双击时间的毫秒数(而不是仅将其设置为任意值500 ),您可以导入Windows.Forms程序集并读取SystemInformation.DoubleClickTime属性,或者,如果您没有要导入程序集,可以P / Invoke GetDoubleClickTime方法。

 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern int GetDoubleClickTime(); 

因此,将上述方法添加到XNA代码中,您可以像这样获得用户的默认双击时间

 const double TimerDelay = (double)GetDoubleClickTime(); 

我想出了这个:

 using wf = System.Windows.Forms; wf.Form form = (wf.Form)wf.Control.FromHandle(this.Window.Handle); form.MouseDoubleClick += new wf.MouseEventHandler(form_MouseDoubleClick); 

所以真的有一种方法可以在XNA中使用Control类来做到这一点:)

上述就是C#学习教程:如何订阅双击?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1022844.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

精彩推荐