4

ユーザーは、次のように ListBox 内の項目をクリックできます。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    textBox2.Clear();
    listBox2.Items.Clear();

    string[] p = 
         Directory.GetFiles(
             textBoxDir.Text, 
             listBox1.SelectedItem.ToString(),
             SearchOption.AllDirectories);

    foreach (string open in p) 
        ......
}

すべて良好。ただし、ユーザーが ListBox の空のスペースをクリックすると、次のエラーが表示されます。

System.NullReferenceException

これは、次のコード行によるものです。

string[] p = 
    Directory.GetFiles(
        textBoxDir.Text, 
        listBox1.SelectedItem.ToString(),   
        SearchOption.AllDirectories);

誰かが巧妙な回避策を持っていますか? または、私のコードに代替案を提案しますか?

4

6 に答える 6

11

回避策は、null 値を確認し、早期に終了することです。

if (listBox1.SelectedItem == null)
{
    return;
}

これにより、他の回答によって導入されたネストが回避され、コードが読みにくくなります。

于 2013-04-27T17:30:02.783 に答える
4

SelectedIndexその行の前に確認できます:

if(listBox2.SelectedIndex < 0)
    return;
于 2013-04-27T17:29:28.970 に答える
1

やってみたらどうですか

if(listBox1.SelectedItem != null){
    // ... do your work with listBox1.SelectedItem here
}

そのエラーの発生を防ぐ必要があります。

于 2013-04-27T17:29:20.853 に答える
1

どうですか

if (listBox1.SelectedItem != null)
{
    string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(),   SearchOption.AllDirectories);
}

完全なコード

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBox1.SelectedItem != null)
    {    
        textBox2.Clear();
        listBox2.Items.Clear();

        string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(), SearchOption.AllDirectories);

        foreach (string open in p) 
         ...... }
    }
}
于 2013-04-27T17:29:48.470 に答える
1

この行を呼び出す前に、 listbox1.SelectedItem が空かどうかを最初に確認してください。

string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(),   SearchOption.AllDirectories);
于 2013-04-27T17:30:56.250 に答える