Leggi la documentazione:
http://msdn.microsoft.com/en-us/library/9da280t0.aspx
C'è scritto chiaramente:
Quindi, poiché la virgola non viene riconosciuta, il parsing si ferma allo zero. In ogni caso, usare Val in .NET è un controsenso: VB2008 non è VB6. Usate CDouble, CType, Convert.ToDouble o Double.Parse.The Val function recognizes only the period (.) as a valid decimal separator. When other decimal separators are used, as in international applications, use CDbl or CInt instead to convert a string to a number. To convert the string representation of a number in a particular culture to a numeric value, use the numeric type's Parse(String, IFormatProvider) method. For example, use Double.Parse when converting a string to a Double.
Nel secondo caso c'è un cast implicito. Scrivere:
equivale a:codice:RCR = TextBox1.Text
Allo stesso modo:codice:RCR = CType(TextBox1.Text, Double)
equivale a:codice:TextBox9.Text = Val(RCR)
Per rispondere alla tua domanda, Val(RCR) è perfettamente inutile (e anche un po' stupido).codice:TextBox9.Text = Val(RCR.ToString()).ToString()