C# Double.TryParse эквивалент на компактной основе
Мы хотим реализовать текстовое поле только для ввода денег (###.00) на устройстве под управлением Win CE 5.0. Приложение разрабатывается с использованием.NET Compact Framework 3.5 (C#).
Мне было предложено следующее решение:
private void textbox1_KeyDown(object sender, KeyEventArgs e)
{
double amount = 0.0d;
if (double.TryParse(txtbox1.Text, NumberStyles.Currency, null, out amount))
{
textbox.Text = amount.ToString("C");
}
}
(Decimal.TryParse
не поддерживается в Compact Framework)?
4 ответа
В этой статье объясняется, как это сделать, создав собственный метод try parse:
http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html
кажется хорошим решением.
Я не могу комментировать, поэтому я должен ответить, но насколько я знаю, TryParse не поддерживается фреймворком 3.5.
Как и другие, http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html - это хорошая работа, которая не требует слишком больших усилий.
Вы можете проверить каждую страницу методов, чтобы узнать конкретные детали. http://msdn.microsoft.com/en-us/library/994c0zb1%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/zc2x2b1h%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/f02979c7%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/9hh1awhy%28v=vs.110%29.aspx
Я бы прокомментировал это, но мне нужно еще 3 кармы для этого, хаха!
TryParse не поддерживается компактным фреймворком.
Вы можете заменить его на
private void textbox1_KeyDown(object sender, KeyEventArgs e)
{
double amount = 0.0d;
try
{
amount = Convert.ToDouble(txtbox1.Text);
textbox.Text = amount.ToString("C");
}
catch
{
}
}
Или обратитесь к этому блогу для реализации TryParse для CF: http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html
TryParse для Compact Framework
/// <summary>
/// Contains methods to assist with parsing one value into another.
/// </summary>
public static class ParseAssistant
{
#region TryParse Overloads
/// <summary>
/// Attempts to parse the string provided into an integer value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out int result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToInt32(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = int.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a byte value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out byte result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToByte(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = byte.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into an Int16 value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out Int16 result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToInt16(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = Int16.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into an Int64 value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out Int64 result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToInt64(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = Int64.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a decimal value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out decimal result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToDecimal(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = decimal.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a float value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out float result)
{
bool retVal = false;
#if WindowsCE
try
{
result = (float)Convert.ToDecimal(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = float.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a double value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out double result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToDouble(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = double.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into an sbyte value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out sbyte result)
{
bool retVal = false;
#if WindowsCE
try
{
result = (sbyte)Convert.ToInt32(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = sbyte.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a uint value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out uint result)
{
bool retVal = false;
#if WindowsCE
try
{
result = (uint)Convert.ToUInt64(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = uint.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a ulong value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out ulong result)
{
bool retVal = false;
#if WindowsCE
try
{
result = (ulong)Convert.ToUInt64(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = ulong.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into a ushort value.
/// </summary>
/// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out ushort result)
{
bool retVal = false;
#if WindowsCE
try
{
result = (ushort)Convert.ToUInt64(s);
retVal = true;
}
catch (FormatException) { result = 0; }
catch (InvalidCastException) { result = 0; }
#else
retVal = ushort.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into an <see cref="System.DateTime"/> value.
/// </summary>
/// <remarks>Returns <see cref="System.DateTime.MinValue"/> in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or <see cref="System.DateTime.MinValue"/> if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out DateTime result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToDateTime(s);
retVal = true;
}
catch (FormatException) { result = DateTime.MinValue; }
catch (InvalidCastException) { result = DateTime.MinValue; }
#else
retVal = DateTime.TryParse(s, out result);
#endif
return retVal;
}
/// <summary>
/// Attempts to parse the string provided into an integer value.
/// </summary>
/// <remarks>Returns false in the result parameter if the parse fails.</remarks>
/// <param name="s">The string to attempt to parse.</param>
/// <param name="result">The result of the parsed string, or false if parsing failed.</param>
/// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
public static bool TryParse(string s, out bool result)
{
bool retVal = false;
#if WindowsCE
try
{
result = Convert.ToBoolean(s);
retVal = true;
}
catch (FormatException) { result = false; }
catch (InvalidCastException) { result = false; }
#else
retVal = bool.TryParse(s, out result);
#endif
return retVal;
}
#endregion
}
http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html