1

アプリケーションで「音楽のオン/オフ」ボタンを作成しようとしています。で次のコードを使用しています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ます。どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

1

Form1音楽を再生しているインスタンスとは関係のない2 番目のインスタンスを作成しています。

Form1音楽を再生しているインスタンスへの参照を に渡し、そのインスタンスを介してForm2呼び出す必要があります。stop()

実際には、WMPLib.WindowsMediaPlayerインスタンスを に渡すこともできます。これによりForm2Form2について何も知る必要がなくなりForm1ます。

例えば

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

次に、 を使用して 2 番目のフォームを作成し、クリック ハンドラnew Form2(wplayer);を呼び出します。player.stop();

于 2013-12-11T07:39:24.490 に答える
0

使用する

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

次にForm2から呼び出します

Form1.wplayer.controls.stop();

現在、音楽を開始したものとは異なる wplayer インスタンスを持つ Form2 で Form1 の新しいインスタンスをインスタンス化しています。

于 2013-12-11T07:38:26.600 に答える
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 を渡したい場合は、フォーム全体を渡す必要はありません。それをプロパティとして渡すこともできます。

于 2013-12-11T07:41:12.627 に答える