尝试在SelectionChanged方法中更改文本框文本时WPF TargetInvocationException

时间:2015-04-10 00:57:40

标签: c# wpf exception

所以我的代码给了我一个TargetInvocationException

link to screenshot of exception details

这是我的代码

public partial class MainWindow
    {
        Double totalPrice = 0;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void txtDiscount_SelectionChanged(object sender, RoutedEventArgs e)
        {
           Double newTotalPrice = 0;
           if (!String.IsNullOrEmpty(txtDiscount.Text))
           {
               newTotalPrice = totalPrice - Double.Parse(txtDiscount.Text);

           }
           txtFullAmount.Text = newTotalPrice.ToString();

        }

最后一行是让它崩溃的那一行,我试图指定一个文本框,以便在不同的文本框发生变化时进行更改。

有趣的是,如果我更改标题

,这将完美无缺
this.Title = newTotalPrice.ToString();

编辑:如果与按钮一起使用,我的原始代码也可以使用。

修改<TextBox Background="#ecf0f1" IsReadOnly="True" Text="" Name="txtFullAmount" SelectionChanged="txtDiscount_SelectionChanged" HorizontalAlignment="Left" Height="23" Margin="505,511,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="85"/>

1 个答案:

答案 0 :(得分:0)

我认为您在XAML中设置了SelectedIndex。在这种情况下,在完全初始化窗口之前引发SelectionChanged事件。在初始化之前,控件的成员变量始终为null

最简单的方法是检查TextBox是否存在,如果是null则返回:

private void txtDiscount_SelectionChanged(object sender, RoutedEventArgs e)
{
    if(txtFullAmount == null) return;
    //your code
}

Title的作业有效,因为此时已存在this