在表单1中启动音乐并在表单2中停止

时间:2013-12-11 07:35:38

标签: c# winforms mute wmplib

我想在我的应用程序中创建一个'音乐开/关'按钮。我在Form 1中使用以下代码,这是我播放音乐的形式:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace WWE2K14SaveEditor
{
    public partial class Form1 : Form
    {
        Form2 frm2 = new Form2();
        public WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();

        public Form1()
        {
            InitializeComponent();
        }   


        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                wplayer.URL = "music/main.mp3";
                wplayer.controls.play();
            }
            catch { }    

        }

当我按下Form 2中的按钮时,我希望音乐停止,我尝试了以下代码,但它似乎不起作用:

Form1 frm1 = new Form1();
frm1.wplayer.controls.stop();

(此代码用于按钮点击事件。)

这是一个Windows窗体应用程序。我正在使用WMPLib。 非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

您正在创建Form1的第二个实例,该实例与播放音乐的实例无关。

您需要将正在播放音乐的Form1实例的引用传递给Form2,并让它通过该实例调用stop()

实际上,您也可以将WMPLib.WindowsMediaPlayer实例传递给Form2,因为它会阻止Form2Form1了解任何事情。

e.g。

public Form2(WMPLib.WindowsMediaPlayer player)
{
    // Assign player to a private member variable.
    this.player = player;
}

然后使用new Form2(wplayer);创建第二个表单,并在点击处理程序中调用player.stop();

答案 1 :(得分:0)

使用

public static WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();

然后使用

从Form2调用它
Form1.wplayer.controls.stop();

目前,您只是在Form2中实例化Form1的新实例,该实例将具有与您启动音乐的实例不同的wplayer实例。

答案 2 :(得分:0)

Form1 frm1 = new Form1();

这会创建表单的新实例,但不会引用播放音乐的表单。

您需要将对Form1的引用传递给Form2。一种策略可能是向Form2添加一个名为MusicForm的属性或类似的东西 - 然后当你创建form2时,你可以传递一个对form1的引用。

public partial class Form2 : Form
    {

        public Form1 MusicForm { get; set;}
        ...
        ...

然后你可以修改Form1:

 public partial class Form1 : Form
    {
        Form2 frm2 = new Form2();
        frm2.MusicForm = this;

        public WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();

然后致电:    this.MusicForm.wplayer.controls.stop();

当然,如果你想要在WindowsMediaPlayer中传递所有表单,则不需要传递整个表单 - 您也可以将其作为属性传递。