What happens is if I have codes inside listBox1_SelectedIndexChanged method, the UI gets stuck every time I press the Add Cash, Save or Refresh Button.
It works fine if I remove the codes inside listBox1_SelectedIndexChanged.
private void LoadAccounts()
{
accounts.Clear();
accounts = DBAccess.LoadAccounts();
UpdateListBox();
}
private void UpdateListBox()
{
listBox1.DataSource = null;
listBox1.DataSource = accounts;
listBox1.DisplayMember = "Username";
}
private void btnAddCash_Click(object sender, EventArgs e)
{
string userName = listBox1.GetItemText(listBox1.SelectedItem);
if ( Int32.TryParse(txtAddCash.Text, out int cash) )
{
DialogResult dr = MessageBox.Show($"Add {txtAddCash.Text} cash to {userName}?", "Add Cash", MessageBoxButtons.YesNo);
if (dr == DialogResult.No)
return;
AccountModel acc = new AccountModel();
acc.Username = userName;
acc.LeftCash = cash;
DBAccess.AddCash(acc);
txtAddCash.Text = "";
LoadAccounts();
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string selected = ((AccountModel)listBox1.SelectedItem).Username;
int leftCash = accounts.Where(a => a.Username == selected).Select(a => a.LeftCash).First();
lblLeftCash.Text = leftCash.ToString();
}
I made a short clip on what happens
It's like the updated UI is behind the old listbox UI