-1

我在这里和其他地方看到过一些关于多功能按钮的帖子,但我在实施他们的建议时遇到了麻烦。

我正在编写一个生成并保存 .wav 文件的合成器。我有一个按钮,可以通过将 SoundPlayer 保存到“bin”来“不保存”播放声音,稍后我将其删除。我意识到这不是播放声音的理想方式!

单击时,我的按钮标签从“播放”变为“停止”。不幸的是,我无法让按钮起到“停止”的作用。

我试过创建一个“计数器”,

    public static int NumOfClicks = 0;

并在每次单击按钮时执行 NumOfClicks++,然后执行 if(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 的开关,但得到相同的“播放器在此上下文中不存在”错误。

如果有人有解决方法或更好的方法,我将不胜感激!

4

1 回答 1

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;

通过使用两个按钮,您可以控制每个按钮何时被点击的状态,从而简化处理点击的代码,而不是试图跟踪点击次数或类似的东西。如果按钮可见/活动,用户可以单击它并执行操作。

于 2015-05-19T04:27:34.377 回答