2016-12-24 2 views
-1

Я хочу, чтобы звук воспроизводился, если я нажимаю клавишу и останавливаюсь, если я отпущу ключ.Как решить переменную не в контексте ошибки в C#?

Но я не знаю, как я мог остановить звук в заявлении KeyUp, потому что он говорит, что p46 не в контексте. Я читал, что это невозможно с переменными, но верно ли это? Какой метод я могу использовать здесь, чтобы заставить его работать?

Я также хочу, чтобы он воспроизводил 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 (комментарий выше) является правильным. Вам нужно использовать 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

Смежные вопросы