2012-11-21 59 views
0

我正在开发一个项目,用于在窗体中检索/显示不同类型的媒体。基本上,用户使用OpenFileDialog选择图像,视频,音频或txt文件,然后该程序将存储在List中。 (我创建的自定义类为每种类型的媒体,所有从一个单一的界面实现。)以C#形式动态添加WindowsMediaPlayer

形式需要持有一个可以通过与下一首/后退按钮被分页这些文件中的“预览”。然而,由于表单并不知道它是什么类型的媒体,所以我在表单上放置了一个Panel,然后将该Panel的引用发送到我的IMedia.DisplayMedia方法,并且每个类负责绘制它自己的在面板中的表示。 (例如一个图片或RichTextField)

对于文本和我创建了一个代码控制图像,然后加入他们使用:

myPanel.Controls.Add(myControl); 

但是,我不能为Windows做,因为WMPLib .WindowsMediaPlayer不从控件继承。

任何想法如何实现这一目标?我没有和WMP结婚,我只需要播放大多数标准视频/音频格式的东西。

谢谢。

+0

好的,已解决。我不得不使用AxWindowsMediaPlayer类,但我遇到的问题(请参阅@LightStriker注释)是我在添加要构建的对象之前尝试设置URL。最终的代码: '公共无效DisplayMedia(控制displayArea) '{ 'displayArea.Controls.Clear(); 'axWMPLib.AxWindowsMediaPlayer wmp = '新的AxWMPLib.AxWindowsMediaPlayer(); 'displayArea.Controls.Add(wmp); 'wmp.URL = filePath; //(类变量) 'wmp.Size = displayArea.Size; '} –

回答

0

您可以将WindowMediaPlayer实际上添加到表单作为对照:

Creating the Windows Media Player Control Programmatically

总之,有一个ActiveX控件,它周围包裹,能够增加它的形式。

+0

这很有帮助,但并不完全正确。代码示例是创建一个WMP对象(不是控件)。它在顶部提到AxWMP是要走的路,但我目前正在与它有问题抛出一个错误,(System.Windows.Forms.AxHost + InvalidActiveXStateException),其中,由它本质上是告诉我,我AxWindosMediaPlayer(或AxHost本身,也许?)没有完全实例化。当我尝试分配Cotrol的URL属性时,它会抛出错误,原因是在完全实例化之前我无法访问属性。 –

+0

我的代码: ' AxWMPLib.AxWindowsMediaPlayer WMP =新AxWMPLib.AxWindowsMediaPlayer(); wmp.MediaError + = new AxWMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError); wmp.PlayStateChange + = 新AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange); wmp.URL = filePath; wmp.Size = displayArea.Size; //添加到表单。 displayArea.Controls.Add(wmp); ' –