关于this post,我想提供将视频文件拖放到Windows媒体控件中的可能性,以便它们自动打开。
我已激活AllowDrop属性无效。
我已经读到使用wmp控件上的图像控件可以实现这一点,但我不知道如何在没有它显示在视频控件上的情况下进行操作。
感谢。
答案 0 :(得分:3)
最好,更清晰的解决方案是将嵌入式媒体播放器包装在用户控件中,并确保将媒体播放器AllowDrop属性设置为“false”,并将用户控件AllowDrop属性设置为true。使嵌入式媒体播放器停靠以填充用户控件,然后像任何用户控件一样将其添加到表单中。当您在表单中选择用户控件时,您将看到DragEnter和DragDrop事件按预期公开。像处理普通控件一样处理它们(Cody提供的代码会这样做)。您可以在以下链接中看到VB中的完整示例(只是不要忘记确保用户控件中的实际嵌入式媒体播放器将其AllowDrop属性设置为false,否则它将“隐藏”拖动事件来自用户控件包装器):
http://www.code-magazine.com/article.aspx?quickid=0803041&page=5
但是如果您只想在Form上的任何地方处理拖放操作,包括通过媒体播放器控件,您需要做的就是处理嵌入式媒体播放器ActiveX控件的容器的DragEnter和DragDrop事件并制作确保实际嵌入式控件的AllowDrop属性设置为False,以便不隐藏容器中的拖动事件,并且容器的AllowDrop设置为true。
这里有一些代码来阐明如何使用容器的拖动事件来弥补媒体播放器ActiveX控件的拖放事件的不足。
只需创建一个新表单,将其命名为MainForm,向WMPLib添加所需的引用,以使应用程序可以使用Media Player ActiveX控件,调整大小以使其大于320像素且高于220像素,并粘贴代码进入您的主表单代码文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using WMPLib;
using AxWMPLib;
namespace YourApplicationNamespace
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 40 is the height of the control bar... 320 x 180 is 16:9 aspect ratio
Panel container = new Panel()
{
Parent = this,
Width = 320,
Height = 180 + 40,
AllowDrop = true,
Left = (this.Width - 320) / 2,
Top = (this.Height - 180 - 40) / 2,
};
AxWindowsMediaPlayer player = new AxWindowsMediaPlayer()
{
AllowDrop = false,
Dock = DockStyle.Fill,
};
container.Controls.Add(player);
container.DragEnter += (s, e) =>
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
};
container.DragDrop += (s, e) =>
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
var file = files.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(file))
player.URL = file;
}
};
}
}
}
现在,您只需将任何媒体文件拖到窗体中心的媒体播放器控件上,它就会将其作为放置目标接受并开始播放媒体文件。
答案 1 :(得分:-1)
Ok的AllowDrop属性应该是真实的MDI表格,或放置视频播放器控件的FORM。 你可以放置一个ListBox或一个标签,然后执行以下操作:
private void filesListBox_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
{
e.Effect = DragDropEffects.All;
}
}
private void filesListBox_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
//add To Media PLayer
//Play the files
}
//Or Handle the first file in string[] and play that file imediatly
}