-2
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{

     ListView lv = (ListView)sender;
     textBox2.Text = lv.FocusedItem.SubItems[3].Text;
     textBox3.Text = lv.FocusedItem.SubItems[0].Text;


}

上記のコードは安全ではないと思います。これにより、リストビュー項目を他のフォームで更新するとNull 参照エラーが発生するため、Null 参照エラーから保護されたままになるように保護するには?

4

2 に答える 2

2

これはプライベートメソッドであるため、独自のクラスから追加しない限り、イベントハンドラーとしてイベントに追加することはできません。したがって、コードで指示した場所を除いて、どこからでもイベントを受信しません。他のフォームのListViewコントロールのイベントは受信しません(指示がない限り)。null参照の例外を停止することが唯一の懸念事項である場合は、プロパティがnullであるかどうかを確認するためのチェックを追加する必要があります。独自のフォームのListViewコントロールは、FocusedItemがない場合、またはフォーカスされたアイテムに予想されるすべてのサブアイテムがない場合でも、イベントを発生させる可能性があります。したがって、完全に安全にするために、次のようなことを行うことができます。

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (sender != null)
    {
        ListView lv = (ListView)sender;
        if ((lv.FocusedItem != null) && (lv.FocusedItem.SubItems.Count >= 4))
        {
            textBox2.Text = lv.FocusedItem.SubItems[3].Text;
            textBox3.Text = lv.FocusedItem.SubItems[0].Text;
        }
    }
}
于 2012-05-31T12:40:25.337 に答える
1

次のように、フォーカスされたアイテムに 4 つのサブアイテムがあるかどうかを確認する必要があります。

 ListView lv = (ListView)sender;
 if (lv.FocusedItem != null && lv.FocusedItem.SubItems.Count > 3)
 {
   textBox2.Text = lv.FocusedItem.SubItems[3].Text;
   textBox3.Text = lv.FocusedItem.SubItems[0].Text;
 }
于 2012-05-31T12:40:46.667 に答える