lblCount是null,你有没有重命名过这个label
解决方案 »
- Api GetPixel使用在xp于win7下不同,求教
- C#怎么操作word?
- ~~~SqlCommandBuilder更新视图(Not DataView But SQL SERVER)所遇到的问题!UP有分!
- 本地一个数据库连接open后,调用的第一个sqlcommand会出现command已与datareader对象associated错误,有哪些可能会导致这种错误产生?
- 如何自定义一个软件的后缀名?
- 求首页生成静态页方法
- 帮定comboBox后再添加一个数据(webform中可以,winform中不行)
- 请教关于使用SQL参数【OleDbParameter】
- 装配件mscorlib和system里都有system名字空间,如果用using system,那编译器知道是用哪个吗?
- 用Response.Redirect只能在同一个页面下跳转网址,我使用IMAGEBUTTON想在一个新的IE里显示跳转,怎么做?
- C#调用kernel32.dll中的GetShortPathName获取短文件名得到空字符串
- WCF使用CreateFile操作磁盘,提示访问拒绝(GetLastError()= 5)
运行报错进入catch了,你才看到运行“正常”!
result就算没数据也会是个sting.empty所以等号右边不会有问题,有问题是是左边lblcount没有这个名称的控件。
运行报错进入catch了,你才看到运行“正常”!
程序只有在启动时会异常,启动后,赋值和现实是正常的。
我在一个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里可以正常操作,并且启动程序后,通过按钮或其他事件进行操作和显示都是正常的。只有在该窗体第一次启动时,才会抛出异常。
发现在初始化TextChanged方法时,这个方法应该是被运行过了,在这之后才到窗体的InitializeComponent(),之后才显示出窗体,这样在lblCount还没有被初始化前就对其赋值,所以抛出异常了。
那这种情况应该怎么合理解决能???
你在什么地方给lblCount注册TextChanged事件?事件在控件初始化完成前被调用,可能性不大!
控件还未初始化呢,就是说Label(控件本身是类对象)还未在堆上分配内存呢,这个时候它的TextChanged事件触发了,这个很难想象。
你在什么地方给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);
}
}
在初始化控件的时候,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();
}
}
如果不报错,可以证实第二种可能