当前位置:编程学习 > C#/ASP.NET >>

C# .net2.0 winform 在一个控件按下鼠标后,鼠标移动事件

我要做一个虚拟钢琴,其中有一个功能,在一个琴键上按下鼠标后(MouseDown),鼠标移动到其他琴键时(MouseMove),就发出相应的声音,可是鼠标按下后,无论鼠标移到哪个控件上,触发MouseMove事件的始终是鼠标按下时的那个控件,请问有什么办法解决呢,使鼠标按下后,移动到哪个控件上,哪个控件就触发MouseMove事件。 --------------------编程问答-------------------- 你MouseDown事件里代码是怎么写的?
MouseDown播放声音,MouseUp里这个控件应恢复到初始状态,然后在其他键的MouseMove时处理相应代码 --------------------编程问答--------------------
引用 1 楼 gxingmin 的回复:
你MouseDown事件里代码是怎么写的?
MouseDown播放声音,MouseUp里这个控件应恢复到初始状态,然后在其他键的MouseMove时处理相应代码

MouseDown这么写的
private void keyDownHandler(object sender, MouseEventArgs e)
{
    midiOutShortMsg(hndle, 0x90 | ((sender as Keyboard).KeyCode << 8) | (velocity << 16));
}
但是鼠标按下后,无论鼠标移动到哪个控件上,sender都是鼠标按下时的那个控件 --------------------编程问答-------------------- 你还得处理MouseHover,MouseLeave 事件。
--------------------编程问答--------------------
引用 3 楼 lye2000000_super 的回复:
你还得处理MouseHover,MouseLeave 事件。

鼠标按下后,MouseLeave事件根本就不会被触发了呀 --------------------编程问答-------------------- 那就处理mousemove事件。判断所在的范围。。。。
--------------------编程问答--------------------
引用 5 楼 lye2000000_super 的回复:
那就处理mousemove事件。判断所在的范围。。。。

是呀,我以前就是根据鼠标与所按控件的相对位置,判断鼠标当前处于哪个控件之上,但这样的话效率太低了,经常鼠标已经滑过琴键,而该琴键还来不及响应 --------------------编程问答-------------------- 不一定每个琴键都有一个控件,可以在一个控件上用GDI+画琴键,然后再MouseMove里判断每个键的Rect与鼠标的位置关系 --------------------编程问答-------------------- 有些软件只支持一定格式的声音文件,你可以换一下声音文件格式。 --------------------编程问答--------------------
引用 7 楼 qq_1277874734 的回复:
不一定每个琴键都有一个控件,可以在一个控件上用GDI+画琴键,然后再MouseMove里判断每个键的Rect与鼠标的位置关系

琴键是UI设计的,我用GDI+画不出来啊 --------------------编程问答--------------------
引用 8 楼 maizaozao 的回复:
有些软件只支持一定格式的声音文件,你可以换一下声音文件格式。

声音用的是MIDI --------------------编程问答-------------------- 先说我是菜鸟啊  
我不知道为什么要写 mousemove 事件啊  全是控件 MouseDown播放声音,MouseUp 结束播放  --------------------编程问答-------------------- 微软的问题。鼠标键按下后。移动。貌似是认为拖动控件。。。
你在windows桌面上试试。。。
我碰到过。当时作为一个bug。没解决。用别的方式绕过去的。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,