我想在我的应用程序中创建一个'音乐开/关'按钮。我在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
。
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
您正在创建Form1
的第二个实例,该实例与播放音乐的实例无关。
您需要将正在播放音乐的Form1
实例的引用传递给Form2
,并让它通过该实例调用stop()
。
实际上,您也可以将WMPLib.WindowsMediaPlayer
实例传递给Form2
,因为它会阻止Form2
对Form1
了解任何事情。
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中传递所有表单,则不需要传递整个表单 - 您也可以将其作为属性传递。