2016-12-24 5 views
-1

キーを押すと音が鳴り、キーを離すと音が止まります。どのようにC#のコンテキストエラーではない変数を解決するには?

しかし、p46は文脈にないので、KeyUp文で音を止める方法がわかりません。私は変数では不可能だと読んでいますが、それは本当ですか?どの方法を使って動作させることができますか?

同時に2つの音を鳴らしたい。

void Test_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.OemPeriod) 
    { 
     var p46 = new System.Windows.Media.MediaPlayer(); 
     p46.Open(new System.Uri(@"C:\Users\Shawn\Desktop\Sonstiges\LaunchBoard\LaunchBoard\bin\Debug\Sounds\Song1Audio41.wav")); 
     p46.Volume = TrackWave.Value/10.00; 
     p46.Play(); 
     System.Threading.Thread.Sleep(50); 
     button19.BackColor = Color.Red; 
    } 
} 

void Test_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.OemPeriod) 
    { 
     button19.BackColor = SystemColors.Control; 
     button19.UseVisualStyleBackColor = true; 
    } 
} 
+7

は別のクラスで、本当にこれは、または同じクラスの別の方法は?後者の場合は、メンバ変数を使用しますか? – doctorlove

答えて

1

doctorlove(上記のコメント)が正しいです。 2つの異なる方法ではなく、2つのクラスからMediaPlayerを使用する必要があります。それで、それをクラススコープに移動してください。これは、(プライベート)フィールドと呼ばれています。

それは次のようになります。

using System; 
using System.Threading; 
using System.Windows.Media; 

namespace Xx 
{ 
    class Yy 
    { 
    MediaPlayer p46 = new MediaPlayer(); // field (class-level variable), 'var' not allowed 

    void Test_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.OemPeriod) 
     { 
     // can see p46 here: 
     p46.Open(new Uri(@"C:\Users\Shawn\Desktop\Sonstiges\LaunchBoard\LaunchBoard\bin\Debug\Sounds\Song1Audio41.wav")); 
     p46.Volume = TrackWave.Value/10.00; 
     p46.Play(); 
     Thread.Sleep(50); 
     button19.BackColor = Color.Red; 
     } 
    } 

    void Test_KeyUp(object sender, KeyEventArgs e) 
    { 
     // can see p46 here: 
    } 
    } 
} 
+0

ありがとう、それは私が必要なものです! – Flixs

関連する問題