3

次のコードがあります。

public Form1()
{
    InitializeComponent();


    string strRadio = Utils.ReadFile(strTemp + @"\rstations.txt");
    string[] aRadio = strRadio.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);    
    for (int i = 0; i < aRadio.Length; i += 2)
    {
       listBox.Items.Add(aRadio[i]);
    }

}

private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
    int index = listBox.SelectedIndex;
    MessageBox.Show(aRadio[(index+1)]);
}

エラーはThe name 'aRadio' does not exist in the current contextです。に由来しMessageBox.Show(aRadio[(index+1)]);ます。aRadioをパブリックまたは何かとして宣言する必要がありますか? もしそうなら、これはどのように行われますか?

4

4 に答える 4

21

aRadioコンストラクター内でローカル変数として宣言しています。インスタンス変数として宣言し、コンストラクター内で値を割り当てる必要があります。

// TODO: Give this a better name
private readonly string[] aRadio;

// TODO: Give your form a better name too
public Form1()
{
    InitializeComponent();

    // TODO: You might want to reconsider reading files in a GUI constructor, too
    // TODO: Use Path.Combine(strTemp, "rstations.txt" instead of concatenation
    string strRadio = Utils.ReadFile(strTemp + @"\rstations.txt");
    aRadio = strRadio.Split(new string[] { "#" },
                            StringSplitOptions.RemoveEmptyEntries);

    for (int i = 0; i < aRadio.Length; i += 2)
    {
       listBox.Items.Add(aRadio[i]);
    }
}

KeyValuePair<string, string>ただし、リスト ボックスにカスタム オブジェクト (または単に ) を追加し、プロパティを使用して表示パーツをバインドすることにより、このアプローチよりも優れた方法を実行できたとしても、私は驚かないでしょう。そうすれば、選択したインデックスではなく選択したアイテムを取得できます...このようにテキスト/値のペアを保持する必要はありません。

于 2012-04-23T13:27:42.003 に答える
2
   private string[] aRadio;

    public Form1() { 
      InitializeComponent();       
      string strRadio = Utils.ReadFile(strTemp + @"\rstations.txt");
      this.aRadio = strRadio.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);
      for (int i = 0; i < aRadio.Length; i += 2)
      {
        listBox.Items.Add(aRadio[i]);
      }
    }

    private void listBox_SelectedIndexChanged(object sender, EventArgs e) {
      int index = listBox.SelectedIndex;
      MessageBox.Show(this.aRadio[(index+1)]);
    } 
于 2012-04-23T13:31:00.267 に答える
1

form1これを行うことができるように、コンストラクターのドメインで定義された変数にアクセスする必要があります

//Define the variable as an attribute of class

private string[] strRadio;
public Form1()
{
        InitializeComponent();
        string strRadio = Utils.ReadFile(strTemp + @"\rstations.txt");
        aRadio = strRadio.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);

        for (int i = 0; i < aRadio.Length; i += 2)
        {
           listBox.Items.Add(aRadio[i]);
        }

    }

    private void listBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        int index = listBox.SelectedIndex;
        MessageBox.Show(aRadio[(index+1)]);
    }
}
于 2012-04-23T13:29:55.727 に答える
-3

System.StringSplitOptions.RemoveEmptyEntries : この方法で入力すると、問題が解決します。

なぜこのように機能することを知っているのか、私に聞かないでください。

于 2014-12-10T04:40:09.413 に答える