《vb.net》ListBox的删除后果

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
TextBox1.Text = ListBox1.Text
ListBox1.Items.Remove(ListBox1.SelectedItem)
End Sub

本人用的是《Microsoft Visual Studio 2010》软件。ListBox1 中是有数据的。当运行代码时,为什么 TextBox1.Text 始终是空的?
这是 VB.Net 语言

原因为 ListBox1.Items.Remove(ListBox1.SelectedItem)时,被选中的条码删除,SelectIndex变成-1,再次触发SelectedIndexChanged事件,此时的ListBox1.Text为空,所以TextBox1.Text又变成了空的。程序运行过程很快,中间的变化过程人分辨不出,所以给你的感觉是始终为空。追问

ListBox1.Items.Remove(ListBox1.SelectedItem)
是不是会自动触发别一个事件?我是初学者,这是什么原理的事件?还有怎样删除 ListBoxt1 的选定内容,而不影响 TextBox1 ?我会加分的。希望你能回答。

追答Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        If ListBox1.SelectedIndex <> -1 Then
            TextBox1.Text = ListBox1.Text
            ListBox1.Items.Remove(ListBox1.SelectedItem)
        End If
End Sub

没有选择任何一个item时,SelectedIndex=-1,

当你选择了其中一个item,SelectedIndex发生变化,触发SelectedIndexChanged事件,

ListBox1.Items.Remove运行后,选中的Item删除了,SelectedIndex再次发生变化,又触发了SelectedIndexChanged事件。

所以你选中一个item,会触发两次SelectedIndexChanged,第二次触发时会清空TextBox1的内容。

追问

我已加分了。
我还想问多一个问题。如果我选择的是 SelectedIndexChanged 事件运行代码,是否会自动触发另一个事?

追答

你好像还是在纠结,你只点了一次,但是代码运行了两次的问题。
1、SelectedIndexChanged事件是什么意思,就是SelectedIndex的值发生了改变(Chaned)的事件。
2、当你选中其中一项时,SelectedIndex的值发生改变。没有选中任何一项时,SelectedIndex的值为-1,假如你选中了第二项,SelectedIndex的值就会发生改变,变成3。
3、当你删除了选中的项时,SelectedIndex的值也会发生改变。删除选中项后,ListBox1中没有项被选择,SelectedIndex就从3(选中了第二项时SelectedIndex的值)变成了-1。
4、综合2和3,SelectedIndex的值从-1变成了3,然后从3变成了-1。两次改变,所以代码会运行两次。

追问的回答:
以SelectedIndexChanged事件为例,运行有两个前提:1、你的程序中有事件的代码;2、程序运行过程中触发了该事件。

你的代码中应该没有写其他的触发代码,那就不会有其他的触发事件发生。

温馨提示:答案为网友推荐,仅供参考
相似回答