c# - C#将不同的文件应用于相同的变量

标签 c# audio

我正在尝试创建一系列按钮,每个按钮都发出声音。从OpenFileDialog函数检索此声音。但是,我遇到了一种声音分配给所有按钮的问题。我知道为什么会这样,但是我不确定如何解决该问题。基本上,我首先为每个按钮分配了相同的算法:

openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            fileName = openFileDialog.FileName;

        }

和:
soundPlayer = new SoundPlayer(fileName);
        soundPlayer.Play();

不幸的是,这非常丑陋,所以我决定将每种算法都放在一个方法中,然后仅将方法调用到它们各自的按钮上。像这样:
public void openDialog()
    {
        openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            fileName = openFileDialog.FileName;

        }
    }

private void button27_Click(object sender, EventArgs e)
    {
        openDialog();
    }

public void playDialog()
    {
        soundPlayer = new SoundPlayer(fileName);
        soundPlayer.Play();
    }
private void button1_Click(object sender, EventArgs e)
    {
        playDialog();
    }

但是,由于openDialog()调用了与接收文件名相同的变量,因此调用openDialog()的每个按钮都使用相同的变量,因此播放相同的声音。

最佳答案

您必须将fileName设置为Button的“一部分”。您可以通过以下任一方法来实现:

  • 检索
  • 时,使用按钮的Tag属性并将其强制转换为字符串
  • 创建一个名为SoundButton的Button的子类,并添加字符串
  • 类型的FileName属性。

    选一个。

    例如,使用标签:
    public void playDialog(string fileName)
    {
        soundPlayer = new SoundPlayer(fileName);
        soundPlayer.Play();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        playDialog((sender as Button).Tag as string);
    }
    

    关于c# - C#将不同的文件应用于相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26577834/

    相关文章:

    android - 如何在Android中比较两种声音?

    objective-c - 音乐未与AVAudioPlayer循环播放

    javascript - 当特定图像接触到其他图像时不触发音频

    ios - 无间断地播放一系列声音 (iPhone)

    c# - 我可以使用 .NET Framework 从指定的 ip 地址发送 webrequest 吗?

    c# - 要删除的节点不是该节点的子节点

    c# - 使用StopWatch测量出现奇怪问题的FPS

    android - 在Android中将短信转换为语音(音频)的代码

    c# - 从 MVC 中的 web api 身份验证 token 中提取用户详细信息

    c# - 我可以将 Braintree.js 与 .NET Web 应用程序一起使用吗?