最好接受我对这个问题的错误。我弄乱了为什么我遇到这个问题。很抱歉打扰你的人......
string name = ((DateTimePicker)sender).Name.ToString();
name = name.Substring(0, name.Length - 1);
name = name + "4";
TimeSpan duration = new TimeSpan();
duration = ((DateTimePicker)sender).Value - ((DateTimePicker)panel2.Controls[name]).Value;
name = name.Substring(0, name.Length - 1);
name = name + "6";
((MaskedTextBox)panel2.Controls[name]).Text = duration.ToString();
执行时,它会将Object引用设置为未设置为对象的实例 类似的功能在其他地方使用,但我无法找到我在这里重新初始化的内容:$
alt text http://www.freeimagehosting.net/uploads/735eefb5db.jpg
datetimepicker的强制转换很好 我必须得到datetiempicker的名称,以确定我在表单中的行 之前的选择器计算它们的差异,然后使用两个日期时间选择器的名称从我的名字制作的控件中打印出掩盖文本框中的差异,但是当我在错误行中访问控件时,我收到此消息。
答案 0 :(得分:4)
很多......
使用String.Format()使这一点更清晰。没有使用StringBuilder是可以的,但是很难理解你想要做什么。
还有像
这样的东西(DateTimePicker)sender
不应该重演。转换一次,然后重用强制转换对象。
DateTimePicker _castObject = (DateTimePicker)sender;
obj not ref错误可能出现在任何这些对象上。除非你单步执行,或者添加防御性陈述(下面),否则你将会有一段时间来搞清楚。
if (sender == null)
{ throw new ArgumentNullException("sender", "sender is null");}
如果在表单上的标准事件处理程序中发生这种情况,它将看起来像这样(原谅VB,我不能再从内存中执行c#)。
Protected Function btnOK_Click(sender as Object, e as EventArgs) Handles btnOK.Click
'your code'
End Function
如果您看到类似的内容,则没有理由在表单上投射任何对象。只需通过其控件名称(btnOK,txtMaskedTextBox等)访问它。
你似乎是以完全错误的方式在这里做事。也许您应该首先解释您尝试解决的实际问题而不是此特定异常。请参阅“thin metal ruler”。
答案 1 :(得分:0)
检查您是否正确形成了“名称”,并且存在具有该名称的控件。而且panel2不为空。