投稿者 刈谷勇  (社会人) 投稿日時 2009/5/12 22:43:23
>今後はあまりプロパティの受け渡しに頼らず
>変数を使ってプログラムを書くようにしたいと思います。

いや、問題なのはプロパティを使っているからではなく、想定外のプロパティ値の時にそのプロパティ値を使っているのが問題なのです。なので、変数を使えば全て解決という問題でもありません。
今回の件では、SelectedIndexChangedのイベントが非選択状態になってとき(SelectedIndex値が-1の時)に呼ばれているのが問題なので、その場合の対処をすればいいだけです。
以下にサンプルを載せますので参考にしてください。

Public Class Form1
    Dim bTextChangeCancel As Boolean = False
    Dim bSelectedIndexChangeCancel As Boolean = False

    Private Sub TextBox1_TextChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TextBox1.TextChanged
        If ListBox1.SelectedIndex < 0 Or bTextChangeCancel Then
            Exit Sub
        End If

        ' SelectedIndexChangedの実行を抑制 
        bSelectedIndexChangeCancel = True

        ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Text

        ' SelectedIndexChangedの抑制を解除 
        bSelectedIndexChangeCancel = False
    End Sub

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        ListBox1.Items.Add("aaa")
        ListBox1.Items.Add("bbb")
        ListBox1.Items.Add("ccc")
        ListBox1.Items.Add("ddd")
        ListBox1.Items.Add("eee")
        ListBox1.SelectedIndex = 0

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As ObjectByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If ListBox1.SelectedIndex < 0 Or bSelectedIndexChangeCancel Then
            Exit Sub
        End If

        ' TextBox1_TextChangedの実行を抑制 
        bTextChangeCancel = True

        TextBox1.Text = ListBox1.Items(ListBox1.SelectedIndex)

        ' TextBox1_TextChangedの抑制を解除 
        bTextChangeCancel = False
        TextBox1.Focus()
    End Sub
End Class