发生了TargetInvocationException,但我完全不知道为什么

时间:2012-10-17 09:56:11

标签: c# exception unhandled-exception targetinvocationexception

我收到此未处理的异常错误:

  

未处理的类型' System.Reflection.TargetInvocationException'发生在PresentationFramework.dll中。

  附加信息:调用目标抛出了异常。

这是我的代码。它是两个TextBoxes的计算器,当用户按下WPF中的+, - ,/,x按钮时,它们应该一起成为新的答案。

public partial class MainWindow : Window
{
    public string numberInString
    {
        get { return TextDoos.Text; }
        set { TextDoos.Text = value; }
    }

    public MainWindow()
    {
        if(TextDoos.Text == "")
        {
            if(TextDoos2.Text == "")
            {
                RekenFunctie(TextDoos.Text, TextDoos2.Text);
            }
        }
    }
}

public int RekenFunctie(string numberInString, string numberInString)
{
    int antwoord;
    int getal = Convert.ToInt32(numberInString);
    int getal2 = Convert.ToInt32(numberInString2);

    if (Buttons.IsPressed) // This is the + button, there are also -,x,/ buttons.
    {
       antwoord = getal + getal2;
       return antwoord;
    }
}

我无法理解为什么它不起作用......

2 个答案:

答案 0 :(得分:3)

您错过了MainWindow构造函数中InitializeComponent()的调用;

public MainWindow() 
{ 
     InitializeComponent();
     button1.Click += button1_click; //'+' button
}

private void button1_click(object sender, RoutedEventArgs e)
{
    int antwoord;
    int getal = Convert.ToInt32(TextDoos.Text);
    int getal2 = Convert.ToInt32(TextDoos2.Text);

    antwoord = getal + getal2;
    resultTextBox.Text = antwoord ;
}

无论如何你的代码很奇怪。 RekenFunctie进行一些计算,但是你可以从构造函数中调用它。因此,您只运行一次此代码,但我认为您的用户希望与您的计算器进行交互。

我认为您应该阅读有关Button.Click事件的内容。

答案 1 :(得分:0)

我遇到了类似的问题。

从TextBox的属性更改evet为TextBlock设置文本时,我遇到了同样的错误。

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        MainTextBlock.Text = ((TextBox)sender).Text;
    } 

我认为在 MainTextBlock组件初始化之前,它是在运行时调用的。

就我而言,只需检查 null 即可。

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (MainTextBlock != null)
            MainTextBlock.Text = ((TextBox)sender).Text;
    }