2015-05-19 2 views
-1

Я видел несколько сообщений о многофункциональных кнопках здесь и в другом месте, но у меня возникли проблемы с реализацией их предложений.Кнопка воспроизведения/паузы для .wav-файла

Я кодирую синтезатор, который генерирует и сохраняет WAV-файл. У меня есть кнопка, которая воспроизводит звук с помощью SoundPlayer «без сохранения», сохраняя его в «bin», и я удаляю его позже. Я понимаю, что это не идеальный способ играть в звуки!

У меня есть ярлык кнопки, меняющийся от «Воспроизвести» до «Стоп» при нажатии. К сожалению, я не могу заставить кнопку функционировать как «остановить».

Я попытался создать «счетчик»,

public static int NumOfClicks = 0; 

и делать NumOfClicks ++ каждый раз, когда кнопка нажата, то, если (ISEVEN (NumOfClicks)), но это дает ошибку «ISEVEN не существует в этот контекст ».

private void btnPlay_Click_1(object sender, EventArgs e) 
    { 
     NumOfClicks++;          
     btnPlay.Text = "Stop"; 
      filePath = @"TestTone.wav"; 
      WaveGenerator wave = new WaveGenerator(); 
      wave.Save(filePath); 
      SoundPlayer player = new SoundPlayer(filePath); 
      player.Play(); 

     if (IsEven(NumOfClicks)) 
      { 
        btnPlay.Text = "Play"; 
        player.Stop(); 
        filePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
        File.Delete(@"TestTone.wav"); 
      } 


     } 

Я попытался создать отдельную кнопку «стоп», но затем команда player.Stop() не работает (игрок «не существует в этом контексте»).

Я попытался использовать переключатель с NumOfClicks, но получил ошибку «игрок не существует в этом контексте».

Если у кого есть исправление или лучший способ сделать это, я был бы очень признателен!

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

что вы используете..wpf, winforms? –

+0

привет, я использую winforms, спасибо! –

ответ

1

Один из способов решить эту проблему - использовать две кнопки. Для первоначальной разработки, пусть они оба видны в разных местах, пока функции запуска/остановки не будут работать так, как вам нужно.

Как только это исправлено, вы можете складывать обе кнопки и устанавливать на них флаг видимости, чтобы установить, какой из них отображается, и какой из них скрыт.

// WPF Sample Code 
void buttonPlay_onClick() 
{ 
    // Do something 
    buttonPlay.Visible = Visibility.Visible; 
    buttonStop.Visible = Visibility.Hidden; 
} 

void buttonStop_onClick() 
{ 
    // Do something 
    buttonPlay.Visible = Visibility.Visible; 
    buttonStop.Visible = Visibility.Hidden; 
} 

Если вы используете WinForms вместо WPF, ваш переключатель видимости будет использовать эти команды.

buttonPlay.Visible = true; 
    buttonStop.Visible = false; 

С помощью двух кнопок, вы можете контролировать состояние, когда каждый из них может быть нажата, и тем самым упростить код для обработки щелчок, а не пытаться отслеживать количество кликов или аналогичный. Если кнопка видна/активна, пользователь может щелкнуть ее и выполнить действие.

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