private void updateButton_Click(object sender, EventArgs e)
{
//custID.Text = customers[id].ID.ToString();
customers[id].Name = custName.Text
Assuming you know they contain a properly formatted number, what you want is to parse the numeric value contained in each of your strings and assign it to a double type variable (which involves transforming a representation of your number as a string into another of different binary content: a double), not cast it (which doesn't). Try:
customers[id].Balance = Double.Parse(custBal.Text);
customers[id].Year_used = Double.Parse(custYear.Text);
Or, if you want to test the parsing's success against a returned boolean instead of doing exception handling to test for a FormatException, you can use TryParse instead:
if (!Double.TryParse(custBal.Text, customers[id].Balance))
Console.WriteLine("Parse Error on custBal.Text");
if (!Double.TryParse(custYear.Text, customers[id].Year_used))
Console.WriteLine("Parse Error on custYear.Text");
More info:
http://msdn.microsoft.com/en-us/library/t9ebt447%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/994c0zb1.aspx