【问题标题】:dynamically add WindowsMediaPlayer in C# form以 C# 形式动态添加 WindowsMediaPlayer
【发布时间】:2012-11-21 01:09:02
【问题描述】:

我正在开展一个项目,该项目旨在检索/显示表单中不同类型的媒体。基本上,用户使用 OpenFileDialog 选择图像、视频、音频或 txt 文件,然后程序会将它们存储在 List 中。 (我为每种类型的媒体创建了自定义类,它们都从一个接口实现。)

表单需要保存这些文件的“预览”,这些文件可以通过下一步/后退按钮进行翻页。但是,由于表单不知道它将是什么类型的媒体,所以我在表单上放置了一个面板,然后将该面板的引用发送给我的 IMedia.DisplayMedia 方法,每个类负责绘制自己的面板中的代表。 (例如 PictureBox 或 RichTextField。)

对于文本和图像,我在代码中创建了控件,然后使用以下方法添加它们:

    myPanel.Controls.Add(myControl); 

但是,我不能对 Windows 执行此操作,因为 WMPLib.WindowsMediaPlayer 不从控件继承。

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

谢谢。

【问题讨论】:

  • 好的,已解决。我确实必须使用 AxWindowsMediaPlayer 类,但我遇到的问题(请参阅@LightStriker cmets)是我尝试在将对象添加到表单之前设置 URL。最终代码:public void DisplayMedia(Control displayArea) { ` displayArea.Controls.Clear(); ` axWMPLib.AxWindowsMediaPlayer wmp = ` new AxWMPLib.AxWindowsMediaPlayer(); displayArea.Controls.Add(wmp); wmp.URL = 文件路径; //(类变量)wmp.Size = displayArea.Size; }

标签: c# media windows-media-player


【解决方案1】:

您实际上可以将 WindowMediaPlayer 作为控件添加到表单中:

Creating the Windows Media Player Control Programmatically

简而言之,有一个围绕它的 ActiveX 控件,以便能够将其添加到表单中。

【讨论】:

  • 这很有帮助,但并不完全正确。代码示例是创建 WMP 对象(不是控件)。它在顶部提到的 AxWMP 是要走的路,但我目前在抛出错误时遇到问题,( System.Windows.Forms.AxHost + InvalidActiveXStateException )它基本上告诉我我的 AxWindosMediaPlayer (或AxHost 本身,也许?)没有完全实例化。当我尝试分配 Cotrol 的 URL 属性时,它会抛出错误,原因是在完全实例化之前我无法访问属性。
  • 我的代码:`AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer(); wmp.MediaError += new AxWMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError); wmp.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange); wmp.URL = 文件路径; wmp.Size = displayArea.Size; //添加到表单。 displayArea.Controls.Add(wmp); `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2021-11-21
  • 2018-09-14
  • 2016-09-04
  • 2015-11-18
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多