最好接受我在这个问题上的错误。我把事情搞砸了,这就是我遇到这个问题的原因。很抱歉打扰你们...
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();
执行时它给我对象引用未设置为对象的实例 其他地方使用了类似的功能,但我无法在此处找到必须重新初始化的内容:$
alt text http://www.freeimagehosting.net/uploads/735eefb5db.jpg
datetimepicker 的转换很好 我必须为 datetiempicker 取一个名字来识别它在我的表单中所在的行 和之前的选择器计算它们的差异,然后在我使用两个日期时间选择器的名称命名的控件的掩码文本框中打印该差异,但是当我访问错误行中的控件时,我收到此消息。
最佳答案
很多...
使用 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”。
关于c# - 谁能告诉我这部分代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2834554/