Vlc.DotNet.Forms VlcControl控件的键盘和鼠标事件被阻塞,终极官方解决方案。。。。

最近需要用VLC做一个视频工具。Nuget引用了Vlc.DotNet.Forms。

前期一切OK,Play方法去播放视频也没问题,结果在做到我想在播放的时候双击全屏,发现播放起来后,鼠标事件和键盘事件都不能生效。又没有官方文档可查,于是墙内墙外查了两天,看起来比较靠谱的方案就是说什么加一个透明的Panel,结果我试了并不能实现也不理想。。。都准备换其他控件了,也很疑问为什么官方会捕获用户的键盘和鼠标事件。。。

先说解决方案,很简单:

vlcControl1.Video.IsMouseInputEnabled = false;
vlcControl1.Video.IsKeyInputEnabled = false;

解决完成。注意一定要两个都false,只一个false依然会被捕获。

 

以下是解决过程,日记流水账可以不用继续往下看了:

于是跑到github上想看源码,发现了一个官方的问答页面,硬着头皮读那些英文对话。。。

终于让我发现了解决方案。写出来让大家不再走弯路。亲测有效。

上面是问题背景,有和上面一样问题的朋友继续往下读。先把对话贴上来!

Vlc.DotNet.Forms VlcControl控件的键盘和鼠标事件被阻塞,终极官方解决方案。。。。_第1张图片

Vlc.DotNet.Forms VlcControl控件的键盘和鼠标事件被阻塞,终极官方解决方案。。。。_第2张图片

 

 

用图1最后一个圈里的写法并没有生效。

作者介绍说,源码Demo里有例子,然后我还是去看了Demo,发现解决办法应该是:

vlcControl1.Video.IsMouseInputEnabled = false;  //而不是vlcControl1.MediaPlayer.Video.IsMouseInputEnabled = false; 

 

然鹅我发现写了vlcControl1.Video.IsMouseInputEnabled = false;还是无效,,非常绝望,但又感觉离成功更加接近。继续看源码Demo发现问题:

// If any of the following 2 elements is true, then the vlc player itself will capture input from the user.
// and then, the mouse click event won't fire.

player.Video.IsMouseInputEnabled = false;
player.Video.IsKeyInputEnabled = false;

注释上写If any of the following 2 elements is true, then the vlc player itself will capture input from the user.(如果以下两个元素中的任何一个是真的,那么vlc播放器本身将捕获来自用户的输入。)换句话说就是你不想被捕获则两个都要设置成假的。。

完美解决。

你可能感兴趣的:(Vlc.DotNet.Forms VlcControl控件的键盘和鼠标事件被阻塞,终极官方解决方案。。。。)