清空条目会导致崩溃,TextChanged
Nulling an Entry results in crash, TextChanged
我有一个条目收集一个数字,之后用作双数。
在删除条目中的所有数字以输入新数字之前,一切正常。
我尝试通过在 Text 为 null 时抛出一个新异常来修复它,但它仍然因
而崩溃
Input string was not in a correct format. (FormatException)
错误发生在moneyOutput.Text = Convert.ToDouble(moneyInput.Text).ToString() + "€";
这是我的 xaml 代码:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Bierrechner.Priceentry"
BackgroundColor="#8c1029"
Title="Eingabe">
<ScrollView>
<StackLayout Margin="0,30,0,0" >
<Entry x:Name="moneyInput" TextChanged="MoneyInput_TextChanged" Placeholder="z.B. 34,99" PlaceholderColor="Gray" TextColor="White" Keyboard="Numeric"/>
<Label x:Name="moneyOutput" Margin="0,40,0,0" HorizontalTextAlignment="Center" FontSize="Large" TextColor="Orange"/>
<Button Text="Weiter" Clicked="Button_Clicked" HorizontalOptions="Center" VerticalOptions="EndAndExpand"/>
</StackLayout>
</ScrollView>
和我的 xaml.cs 代码:
private void MoneyInput_TextChanged(object sender, TextChangedEventArgs e)
{
if (moneyInput.Text != null)
{
moneyOutput.Text = Convert.ToDouble(moneyInput.Text).ToString() + "€";
sharePrice = Convert.ToDouble(moneyInput.Text);
}
else if (moneyInput.Text == null)
{
throw new ArgumentException("String cannot be null or empty");
}
}
我注意到 if (moneyInput.Text != null)
没有任何效果,因为代码仍在执行。
您的代码再次检查 null。
if (moneyInput.Text != null)
您还需要检查空字符串。
if (!string.IsNullOrEmpty(moneyInput.Text))
其实Text属性在输入框清空时不会为null,它只是一个空字符串。
也可以考虑使用 Double.TryParse,而不是 Convert.ToDouble。无论字符串的值是什么,TryParse 方法都不会抛出异常,如果字符串为 null、空或格式不正确,该方法只是 returns false.
我有一个条目收集一个数字,之后用作双数。 在删除条目中的所有数字以输入新数字之前,一切正常。
我尝试通过在 Text 为 null 时抛出一个新异常来修复它,但它仍然因
而崩溃Input string was not in a correct format. (FormatException)
错误发生在moneyOutput.Text = Convert.ToDouble(moneyInput.Text).ToString() + "€";
这是我的 xaml 代码:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Bierrechner.Priceentry"
BackgroundColor="#8c1029"
Title="Eingabe">
<ScrollView>
<StackLayout Margin="0,30,0,0" >
<Entry x:Name="moneyInput" TextChanged="MoneyInput_TextChanged" Placeholder="z.B. 34,99" PlaceholderColor="Gray" TextColor="White" Keyboard="Numeric"/>
<Label x:Name="moneyOutput" Margin="0,40,0,0" HorizontalTextAlignment="Center" FontSize="Large" TextColor="Orange"/>
<Button Text="Weiter" Clicked="Button_Clicked" HorizontalOptions="Center" VerticalOptions="EndAndExpand"/>
</StackLayout>
</ScrollView>
和我的 xaml.cs 代码:
private void MoneyInput_TextChanged(object sender, TextChangedEventArgs e)
{
if (moneyInput.Text != null)
{
moneyOutput.Text = Convert.ToDouble(moneyInput.Text).ToString() + "€";
sharePrice = Convert.ToDouble(moneyInput.Text);
}
else if (moneyInput.Text == null)
{
throw new ArgumentException("String cannot be null or empty");
}
}
我注意到 if (moneyInput.Text != null)
没有任何效果,因为代码仍在执行。
您的代码再次检查 null。
if (moneyInput.Text != null)
您还需要检查空字符串。
if (!string.IsNullOrEmpty(moneyInput.Text))
其实Text属性在输入框清空时不会为null,它只是一个空字符串。
也可以考虑使用 Double.TryParse,而不是 Convert.ToDouble。无论字符串的值是什么,TryParse 方法都不会抛出异常,如果字符串为 null、空或格式不正确,该方法只是 returns false.