1

最好接受我在这个问题上的错误。我把事情搞砸了,这就是我遇到这个问题的原因。不好意思打扰各位了...

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();

在执行时,它给了我未设置为对象实例的对象引用,在其他地方使用了类似的功能,但我无法找到我必须在这里重新初始化的内容:$

替代文字 http://www.freeimagehosting.net/uploads/735eefb5db.jpg

datetimepicker 的转换很好我必须为 datetiempicker 获取一个名称,以识别它在我的表单中所在的行和之前的选择器以计算它们的差异,然后在我使用其名称的控件的 maskedtext 框中打印该差异两个日期时间选择器的名称,但是当我访问错误行中的控件时,我收到此消息。

4

2 回答 2

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 等)访问它。

您似乎以完全错误的方式在这里做某事。也许您应该首先解释您要解决的实际问题,而不是这个特定的异常。见“薄金属尺”。

于 2010-05-14T13:47:35.860 回答
0

检查您是否正确形成了“名称”并且具有该名称的控件存在。并且那个 panel2 不为空。

于 2010-05-14T13:55:18.067 回答