It doesn't look as though your code is that which you'd expect to see in a databinding situation.
In this case the each of the controls would be bound to a common BindingSource.
It looks as though you have a Listbox populated with some items and if you change the listbox item then a textbox is populated and a couple of properties.
Although its VB.NET code its mimicing what you are doing and works just fine. Instead of selecting a selectedIndex of -1 I set the selectedItems property to nothing. Ensure that multiselect property is set to false as you only want to be able to select a single item on the listbox.
Public Class Form2
Private sBrandName As String
Public Property BrandName() As String
Get
Return sBrandName
End Get
Set(ByVal value As String)
sBrandName = value
End Set
End Property
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.SelectedItem = Nothing
BrandName = Nothing
Me.TextBox1.Text = ""
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
If ListBox1.SelectedItem IsNot Nothing Then
Me.TextBox1.Text = Me.ListBox1.SelectedItem.ToString
BrandName = Me.ListBox1.SelectedItem.ToString
End If
End Sub
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.ListBox1.Items.Clear()
Me.ListBox1.Items.Add("Fred")
Me.ListBox1.Items.Add("John")
Me.ListBox1.Items.Add("Bill")
Me.ListBox1.Items.Add("Tony")
End Sub
End Class
If your using databinding - you probably dont need to set the txtBrandName.text property in the selectedIndexChanged event - you can simply attach the datasource/datamember properties of this textbox control to the same data BindingSource as the listbox.