lblCount是null,你有没有重命名过这个label

解决方案 »

  1.   

    神马程序可以正常运行?!
    运行报错进入catch了,你才看到运行“正常”!
      

  2.   

    这里设置个断点就知道了:lblCount.Content = result.ToString();
    result就算没数据也会是个sting.empty所以等号右边不会有问题,有问题是是左边lblcount没有这个名称的控件。
      

  3.   

    神马程序可以正常运行?!
    运行报错进入catch了,你才看到运行“正常”!
    程序只有在启动时会异常,启动后,赋值和现实是正常的。
      

  4.   

    题目描述错了个地方:
    我在一个Text(txtXZ.Text)的TextChanged添加了以下代码,而不是Label。
    lblCount初始化是在xaml里做得:
    <Label x:Name="lblCount" Content="0" Canvas.Left="61" Canvas.Top="10"/>
    lblCount这个label控件是有的,在XXX.xaml里,在XXX.xaml.cs里可以正常操作,并且启动程序后,通过按钮或其他事件进行操作和显示都是正常的。只有在该窗体第一次启动时,才会抛出异常。
      

  5.   

    详细看了以下,和我当初的猜测是一致的。
    发现在初始化TextChanged方法时,这个方法应该是被运行过了,在这之后才到窗体的InitializeComponent(),之后才显示出窗体,这样在lblCount还没有被初始化前就对其赋值,所以抛出异常了。
    那这种情况应该怎么合理解决能???
      

  6.   

    wpf,不是很了解。
    你在什么地方给lblCount注册TextChanged事件?事件在控件初始化完成前被调用,可能性不大!
    控件还未初始化呢,就是说Label(控件本身是类对象)还未在堆上分配内存呢,这个时候它的TextChanged事件触发了,这个很难想象。
      

  7.   

    wpf,不是很了解。
    你在什么地方给lblCount注册TextChanged事件?事件在控件初始化完成前被调用,可能性不大!
    控件还未初始化呢,就是说Label(控件本身是类对象)还未在堆上分配内存呢,这个时候它的TextChanged事件触发了,这个很难想象。
    你说的是,但我做单步调试看到的的确是这样的流程。
    TextChanged事件是TextBox的,不是Label的,lblCount是为了实时显示多个TextBox相加的结果,呵呵。
    <TextBox x:Name="txtJS" Height="23" Canvas.Left="62" TextWrapping="Wrap" Text="5" Canvas.Top="72" Width="50" TextChanged="txtJS_TextChanged"/>
    然后在XXX.maxl.cs中:
    private void txtJS_TextChanged(object sender, TextChangedEventArgs e)
            {
                try
                {
                    int result = 0;
                    result = Convert.ToInt32(txtJS.Text);
                    lblCount.Content = result.ToString();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
      

  8.   

    我猜测:
    在初始化控件的时候,txtJS先于lblCount完成初始化,这个时候注册TextChanged事件的时候,这个事件被触发。
    或者
    控件都初始化完成,注册事件的时候,触发了TextChanged事件,此时txtJS.Text为null你的TextChanged事件,改成private void txtJS_TextChanged(object sender, TextChangedEventArgs e)
            {
    if(!String.IsNullOrEmpty((txtJS.Text))
    {
                    int result = 0;
                    result = Convert.ToInt32(txtJS.Text);
                    lblCount.Content = result.ToString();
    }
            }
    如果不报错,可以证实第二种可能