Запуск музыки в Форме 1 и остановка в Форме 2

Я хочу сделать кнопку "Включение / выключение музыки" в моем приложении. Я использую следующий код в 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 Forms. Я использую WMPLib, Любая помощь будет высоко ценится, спасибо.

3 ответа

Решение

Использование

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

затем вызвать его из Form2 с

Form1.wplayer.controls.stop();

В настоящее время вы просто создаете новый экземпляр Form1 в своей Form2, который будет иметь другой экземпляр wplayer, чем тот, с которого вы запустили музыку.

You are creating a second instance of Form1 which has no relation to the instance playing the music.

Вам необходимо передать ссылку на Form1 instance which is playing the music to Form2и позвони stop() through that instance.

Actually, you may as well pass the WMPLib.WindowsMediaPlayer instance on to Form2, as it will prevent Form2 having to know anything about Form1,

например

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

Then create your second form using new Form2(wplayer);и позвоните player.stop(); в вашем обработчике кликов.

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 вместо этого - вы также можете просто передать это как свойство.

Другие вопросы по тегам