Ciao, a quanto vedo il problema sta nella conversione:
decimal p=String.Format("{0:c}",prezzo.Text.ToString());
p è un decimale e si aspetta un decimal. Quindi va convertito:
decimal p=Convert.ToDecimal(String.Format("{0:c}",prezzo.Text));
o "parsato":
decimal p=decimal.Parse(String.Format("{0:c}",prezzo.Text));
non serve il ToString() finale, visto che la proprietà Text restituisce già uno string
Buona giornata,
PV