投稿者 刈谷勇@頭だけGW  (社会人) 投稿日時 2009/5/1 23:47:19
まず、エラーになる原因ですが、TextChangedはテキストボックスの値が変わった瞬間に
発生します。
たとえば、テキストボックスにBBBと入っている場合にAAAと変更しようした場合、Aを入力した
瞬間にイベントが発生します。
ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Textを実行すると、SelectedIndexChangedが2回流れるようです。
(選択行解除、元の行の再選択)
このときの選択行解除のSelectedIndexChangedでItemsの配列外を指してしまうためにエラーになっています。(うまく説明できないので、ステップ実行でSelectedIndexの内容を確認してみてください)

もう1つ問題があります。
ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Textだと、リストの選択されている行の値を変えてしまいます。
選択行を変えるならば、ListBox1.Text = TextBox1.Textでいいと思います。
(リストに存在しない場合は、選択行は変わりません)

以上を踏まえたサンプルです。
    Private Sub TextBox1_TextChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TextBox1.TextChanged
        ListBox1.Text = TextBox1.Text
    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
        TextBox1.Text = ListBox1.Text
        TextBox1.Focus()
    End Sub