2012-05-29 44 views
8

我试图以编程方式创建Windows Media Player控件,以便可以捕获任何初始化错误。之前当我把控制权放在我的表格上时,一切都很顺利。但是现在我试图以编程方式播放内容,视频并未出现在控件中。我只看到黑色视频,但我听到了音频。如果以编程方式创建控件,Windows Media Player视频为黑色

任何想法?

public TrimVideoControl() 
    { 
     InitializeComponent(); 

     // Try creating WMP control 
     // We do this here so we can gracefully catch errors if the control doesn't load 
     try 
     { 

      wmPlayer = new AxWMPLib.AxWindowsMediaPlayer(); 
      ((System.ComponentModel.ISupportInitialize)(wmPlayer)).BeginInit(); 
      //SuspendLayout(); 
      wmPlayer.CreateControl(); 
      wmPlayer.Name = "wmPlayer"; 
      wmPlayer.Ctlenabled = true; 
      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrimVideoControl)); 
      wmPlayer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("wmPlayer.OcxState"))); 
      wmPlayer.Location = new Point(12, 13); 
      wmPlayer.Size = new Size(636, 358); 
      wmPlayer.enableContextMenu = true; 
      wmPlayer.stretchToFit = true; 
      wmPlayer.uiMode = "none"; 
      wmPlayer.settings.autoStart = false; 
      wmPlayer.ErrorEvent += wmPlayer_ErrorEvent; 
      wmPlayer.MediaChange += wmPlayer_MediaChange; 
      wmPlayer.MediaError += wmPlayer_MediaError; 
      wmPlayer.OpenStateChange += wmPlayer_OpenStateChange; 
      wmPlayer.PlayStateChange += wmPlayer_PlayStateChange; 
      wmPlayer.Warning += wmPlayer_Warning; 
      this.Controls.Add(wmPlayer); 
      ((System.ComponentModel.ISupportInitialize)(wmPlayer)).EndInit(); 

      //this.ResumeLayout(false); 
      //this.PerformLayout(); 
      //wmPlayer.Show(); 
      //wmPlayer.BringToFront(); 
     } 
     catch (Exception ex) 
     { 
      Logger.Error("Error creating WMP control: " + ex); 
     } 


    } 

回答

10

与MediaPalyer运行时创建确切的问题是,我们不能执行MediaPlayer的状态的组件之前,任何更改(如URL/uimode等任何设置)已完全初始化的事实。 VS设计器序列化组件的状态为AxHost.State对象,不会影响任何其他设置。在运行时,您可以使用以下方法:

void AddMediaPlayer(string url) { 
    try { 
     var wmPlayer = new AxWMPLib.AxWindowsMediaPlayer(); 

     ((System.ComponentModel.ISupportInitialize)(wmPlayer)).BeginInit(); 
     wmPlayer.Name = "wmPlayer"; 
     wmPlayer.Enabled = true; 
     wmPlayer.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.Controls.Add(wmPlayer); 
     ((System.ComponentModel.ISupportInitialize)(wmPlayer)).EndInit(); 

     // After initialization you can customize the Media Player 
     wmPlayer.uiMode = "none"; 
     wmPlayer.URL = url; 
    } 
    catch { } 
} 
+0

工作正常!非常感谢。 –

相关问题