2016-03-31 39 views
-3

我有以下代码,我试图通过几条if语句,但我在将标签的内容设置为0时出现问题;无法将标签的内容设置为零

private void UnderRunBumper() 
{ 
    lblGVMAmount.Content = 0; //Issue here 
    if (Convert.ToInt32(txtExternalLength.Text) >= 6000) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 

    else if (Convert.ToInt32(lblGVMAmount.Content.ToString()) >= 8000) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 

    else if (cmbBodyType.SelectedIndex == 6 || cmbBodyType.SelectedIndex == 7 || cmbBodyType.SelectedIndex == 8 || cmbBodyType.SelectedIndex == 9 || cmbBodyType.SelectedIndex == 10) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 
    else lblUnderRunBumper.Content = ""; 
} 

我得到的错误:

Object reference not set to an instance of an object.

我不明白。为什么我不能将标签的值设置为0?

+0

你为什么要发布[6小时相同质询时(http://stackoverflow.com/questions/36337084/setting-label-content-causes-issues) – MethodMan

+0

是lblGVMAmount空当您尝试将其内容属性设置为0? –

+0

@ MADsc13nce是的,它是:) – CareTaker22

回答

1

在WPF应用程序(或winforms)中,UserControl或Window使用名为InitializeComponent的调用构建自身,该调用会自动添加到后面代码中的构造函数中。

这个调用是初始化你的视图,并实例化它上面的对象。在此方法完成之前,请勿尝试触摸UI控件。

E.g.

public partial class MyView : UserControl 
{ 
    public MyView() 
    { 
     var x = myButton; //<Button Name="myButton" /> in xaml 
          // x is null 

     InitializeComponent(); 

     x = myButton; //x is valid 

    } 
} 
+0

感谢您的答案和解释! :D我发现了这个问题,但不知道为什么会发生。我在文本框的TextChanged事件中使用了'UnderRunBumper()'方法,这是由于某种原因导致我的崩溃的原因。 – CareTaker22

+1

也许在实例化标签之前'InitializeComponent'调用期间文本被更改。只是猜测。检查你的通话堆栈,你就会知道。这是学习宝贵的调试技巧的好机会。 – Jonesopolis

+0

我认为你完全正确。这是唯一对我有意义的解释。但是,谢谢你的帮助,并且不会像一些在这里评论的窥视片那样负面。 – CareTaker22

相关问题