【问题标题】:How to solve variable not in context error in C#?如何解决 C# 中变量不在上下文中的错误?
【发布时间】:2017-05-09 20:21:29
【问题描述】:

我希望按下按键时声音播放,松开按键时声音停止。

但我不知道如何停止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;
    }
}

【问题讨论】:

  • 这真的是另一个类,还是同一个类的另一个方法?如果是后者,使用成员变量?

标签: c# class var


【解决方案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:
    }
  }
}

【讨论】:

  • 谢谢,这正是我需要的!
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 2015-11-28
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2022-01-10
相关资源
最近更新 更多