读取文件,然后使用它从另一个按钮c#

本文关键字:另一个 按钮 文件 然后 读取 | 更新日期: 2023-09-27 18:03:15

我试图把一个表单应用程序来浏览和播放WAV文件。目前,它有两个按钮-一个是浏览和选择WAV,另一个是播放。我已经实现了浏览按钮,它工作正常。我通过在按钮内播放WAV声音来检查它,如您所见:

private void Browse_Click(object sender, EventArgs e) {
    OpenFileDialog tarik = new OpenFileDialog();
    tarik.Title = "Browse...";
    tarik.InitialDirectory = @"Desktop";
    tarik.Filter = "Wav files (*.wav)|*.wav";
    tarik.RestoreDirectory = true;
    if (tarik.ShowDialog() == DialogResult.OK) {
        textBox1.Text = tarik.FileName;
        Stream tarik2 = tarik.OpenFile();
        SoundPlayer snd = new SoundPlayer(tarik2);
        snd.Play();
    }
}

我测试了代码,它正在工作,但是当我试图从另一个按钮调用'tarik'时:

private void Play_Click(object sender, EventArgs e) {}

如上所示,它说我不允许这样做

读取文件,然后使用它从另一个按钮c#

你在浏览处理程序中创建的变量是局部变量(它们应该是),这意味着一旦方法结束,它们就不能被访问(因为它们不存在)。

您需要创建一个实例字段,该字段在对象的整个生命周期中存在,以允许其他方法访问它:

//new instance field.
private string tarikFileName;
private void Browse_Click(object sender, EventArgs e)
{
    OpenFileDialog tarik = new OpenFileDialog();
    tarik.Title = "Browse...";
    tarik.InitialDirectory = @"Desktop";
    tarik.Filter = "Wav files (*.wav)|*.wav";
    tarik.RestoreDirectory = true;
    if (tarik.ShowDialog() == DialogResult.OK) {
        //store value in instance field
        tarikFileName = tarik.FileName;
        textBox1.Text = tarik.FileName;
        Stream tarik2 = tarik.OpenFile();
        using(SoundPlayer snd = new SoundPlayer(tarik2))
            snd.Play();
    }
}
private void Play_Click(object sender, EventArgs e)
{
    if(tarikFileName != null)
    {
        Stream stream = File.OpenRead(tarikFileName);
        using(SoundPlayer snd = new SoundPlayer(stream))
            snd.Play();
    }
}

还请注意,当您完成SoundPlayer时应该处理它,因此我将其包装在using块中以确保发生。

我建议采用以下方法:

  1. SoundPLayer声明为Form的变量
  2. Browse按钮的处理程序中获取文件名,创建一个流并初始化你的SoundPlayer
  3. Play按钮的处理程序中调用SoundPlayerPlay()方法。

为了在两个方法之间共享数据,您需要一些地方来存储引用。在您的情况下,我建议从textBox1.Text中提取文件名。这样,您就不必担心在多个地方管理(打开/关闭)流。

private void Browse_Click(object sender, EventArgs e)
{
    OpenFileDialog tarik = new OpenFileDialog();
    tarik.Title = "Browse...";
    tarik.InitialDirectory = @"Desktop";
    tarik.Filter = "Wav files (*.wav)|*.wav";
    tarik.RestoreDirectory = true;
    if (tarik.ShowDialog() == DialogResult.OK) {
        textBox1.Text = tarik.FileName;
    }
}
private void Play_Click(object sender, EventArgs e)
{
        using(Stream tarik2 = File.Open(textBox1.Text, FileMode.Open))
        {
            SoundPlayer snd = new SoundPlayer(tarik2);
            snd.Play();
        }
}