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