c# - 如何在 C# Windows 窗体应用程序中的 VLC 点网窗体中添加搜索栏

标签 c# .net winforms vlc libvlc

我需要添加一个自定义搜索栏/跟踪栏,正如您在 C# Windows 窗体中所说的那样。但问题是几乎没有关于 vlc dot net forms 库的文档。我需要知道如何在 Windows 窗体应用程序中添加自定义搜索栏。

记住,我没有使用 vlc activeX 插件*。 **相反,我正在使用 vlc 的 dot net 库的 nuget 包,一切正常。我添加了切换播放和暂停按钮、停止按钮、能够获取当前时间、能够获取总时间和其他所有内容。但我不知道如何添加一个搜索栏,以便在我搜索时,视频移动到那个位置。 请帮我提供完整的代码。

最佳答案

我成功完成了,谢谢,这对我来说是一个很好的练习。我在 formdeneme() 方法中添加了媒体

您必须公开 VlcControl.cs 类中的对象。(private VlcMediaPlayer myVlcMediaPlayer;){非常重要}

public int a = 0 ;` 
public int c = 0;  
public delegate void UpdateControlsDelegate(); //Execute when video loads

public formdeneme()
{
    InitializeComponent();
    myVlcControl.Play("file:///C:/Users/1315k/Downloads/machine.mp4");           
    // You can add your media like above.
    //Event handler for 'current media time' label
    this.vlcControl1.PositionChanged += new System.EventHandler<Vlc.DotNet.Core.VlcMediaPlayerPositionChangedEventArgs>(this.vlcControl1_PositionChanged);
    //Event handler for setting trackBar1.Maximum on media load
    vlcControl1.Playing += new System.EventHandler<VlcMediaPlayerPlayingEventArgs>(SetProgresMax);
}

// This is the main function which you looking.
private void trackBar1_Scroll(object sender, EventArgs e)
{                        
    myVlcControl.myVlcMediaPlayer.Time = trackBar1.Value * 1000;
    int b = (int)myVlcControl.myVlcMediaPlayer.Time / 1000;
    int d = b / 60;
    b = b - d * 60;
    label1.Text = d+":"+b + "/"+ c + ":" + a;
    // The Time value is milisecond, you have divide 1000 for be second.
}

private void formdeneme_Load(object sender, EventArgs e)
{
    a = (int)myVlcControl.myVlcMediaPlayer.Length / 1000;           
    trackBar1.Maximum = a;  
    c = a / 60;
    a = a - c * 60;        
    label1.Text = 0 + "/" + c+":"+a;            
}

您可以添加一个可以更改媒体和轨迹栏的按钮。最大值。

已更新

感谢 askepott 他在下面添加了一些代码,我没有尝试,但对我来说看起来不错。

为了有一个显示当前媒体时间的标签,添加这个委托(delegate)函数,它在下面称为函数 (currentTrackTime),声明在本文顶部。另外,不要忘记在顶部添加 vlcControl1_PositionChanged 事件处理程序。

//更新当前视频时间标签(委托(delegate))

public void InvokeUpdateControls()
    {
        if (this.InvokeRequired)


        {
            this.Invoke(new UpdateControlsDelegate(currentTrackTime));
        }
        else
        {
            currentTrackTime();
        }
    }

//更新当前视频时间标签

private void currentTrackTime()
   {                        
   int b = (int)vlcControl1.VlcMediaPlayer.Time / 1000;
   int d = b / 60;
   b = b - d * 60;
   label1.Text = d+":"+b + "/"+ c + ":" + a; //min : sec / 
   }

//如果您希望轨迹栏根据当前媒体位置自动更新其值,请将其添加到 currentTrackTime()

trackBar1.Value = b;

//调用视频位置变化的更新控件

private void vlcControl1_PositionChanged(object sender, Vlc.DotNet.Core.VlcMediaPlayerPositionChangedEventArgs e)
{
    InvokeUpdateControls();
}

//此外,如果您在加载视频时无法获取和设置 vlcControl1.Length,请使用:

//Fire event when the video starts
private void SetProgresMax(object sender, VlcMediaPlayerPlayingEventArgs e)
{
   Invoke(new Action(() =>
   {
       trackBar1.Value = trackBar1.Minimum;
       var vlc = (VlcControl)sender;
       trackBar1.Maximum = (int)vlc.Length / 1000;
       a = (int)vlc.Length / 1000; // Length (s)
       c = a / 60; // Length (m)
       a = a % 60; // Length (s)
       label1.Text = 0 + "/" + c+":"+a; 
   }));

关于c# - 如何在 C# Windows 窗体应用程序中的 VLC 点网窗体中添加搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061030/

相关文章:

c# - MVC 会取代传统的手动创建的 BLL 吗?

.net - 添加我自己的 WPF TriggerAction

c# - 如何限制表单的水平移动?

c# - 通过 Win + M windows 快捷方式最小化无边框窗体

c# - ASP.NET 成员资格和角色提供者配置问题

c# - 使用迷你轮廓仪

.net - 为什么 String 类不在可移植库中实现 IEnumerable<char> ?

c# - 当数据库发生任何变化时,winforms 应用程序中的 Datagridview 会自动更新

c# - 为 Canvas 上的矩形设置 zindex 不会将其置于前面

c# - 为什么我的 Moq 声称没有抛出任何调用,但它在异常中显示抛出的调用?