C# .net2.0 winform 在一个控件按下鼠标后,鼠标移动事件
我要做一个虚拟钢琴,其中有一个功能,在一个琴键上按下鼠标后(MouseDown),鼠标移动到其他琴键时(MouseMove),就发出相应的声音,可是鼠标按下后,无论鼠标移到哪个控件上,触发MouseMove事件的始终是鼠标按下时的那个控件,请问有什么办法解决呢,使鼠标按下后,移动到哪个控件上,哪个控件就触发MouseMove事件。 --------------------编程问答-------------------- 你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 事件。
--------------------编程问答--------------------
鼠标按下后,MouseLeave事件根本就不会被触发了呀 --------------------编程问答-------------------- 那就处理mousemove事件。判断所在的范围。。。。
--------------------编程问答--------------------
是呀,我以前就是根据鼠标与所按控件的相对位置,判断鼠标当前处于哪个控件之上,但这样的话效率太低了,经常鼠标已经滑过琴键,而该琴键还来不及响应 --------------------编程问答-------------------- 不一定每个琴键都有一个控件,可以在一个控件上用GDI+画琴键,然后再MouseMove里判断每个键的Rect与鼠标的位置关系 --------------------编程问答-------------------- 有些软件只支持一定格式的声音文件,你可以换一下声音文件格式。 --------------------编程问答--------------------
琴键是UI设计的,我用GDI+画不出来啊 --------------------编程问答--------------------
声音用的是MIDI --------------------编程问答-------------------- 先说我是菜鸟啊
我不知道为什么要写 mousemove 事件啊 全是控件 MouseDown播放声音,MouseUp 结束播放 --------------------编程问答-------------------- 微软的问题。鼠标键按下后。移动。貌似是认为拖动控件。。。
你在windows桌面上试试。。。
我碰到过。当时作为一个bug。没解决。用别的方式绕过去的。
补充:.NET技术 , C#