2010-05-14 205 views
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(); 

在执行它给了我对象引用未设置到对象 类似的功能,例如用在其他地方,但我不能找出我要在这里重新初始化:$

alt text http://www.freeimagehosting.net/uploads/735eefb5db.jpg

dateTimePicker的铸件精细 我必须得到一个名字为datetiempicker识别之前,它是在我的形式 行和选择器来计算他们之间的分歧,然后打印塔t在控件的maskedtext框中的差别,这个控件的名称使用两个datetimepickers的名字,但是当我在错误行中访问控件时,我得到这个消息。

+2

你需要更具体一点,究竟是哪一行引发异常? – James 2010-05-14 13:44:33

+0

你在做什么名字?在不知道细节的情况下,我们不可能说出来。只需连接调试器,然后逐步检索控件的每一行。其中一个是空的。 – Nix 2010-05-14 13:45:37

+0

就像Nix说的那样,你会发现错误...它可能是panel2.Controls [name]或panel2本身...嗯...也许发件人为空? – w4ik 2010-05-14 13:48:31

回答

4

很多...

使用的String.Format(),使这个更清晰一点。不要为此使用StringBuilder是可以的,但真正很难理解你正在尝试做什么。

此外,诸如此类的

(DateTimePicker)sender 

不应重复。施放一次,然后重新使用该施放对象。

DateTimePicker _castObject = (DateTimePicker)sender; 

obj not ref error可能在任何这些对象上。除非您逐步完成,或者添加防御性陈述(如下所示),否则您将有一段时间计算出来。

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”。

+0

你可以帮助更多关于我应该使用铸造一次......但你不认为这会为此做一个单独的对象,我将无法访问我的表单上的对象 – Mobin 2010-05-14 13:57:43

+0

您正在使用发件人3x并将其转换为3x。这会导致额外的工作。投它一次,并使用铸造结果。你是什​​么意思“不能访问我的表单上的对象”?也许你应该发布更多的方法,以便我们可以确切地看到你想要完成的工作。 – StingyJack 2010-05-14 14:35:58

+0

我的意思是,如果名为MaskedTextBox1的控件位于您的窗体上,并且您将其投射并保存在另一个对象中,则无法从该Castted对象访问MaskedTextBox1。我试过你说的,但是我必须重新计算才能得到我的控制MaskedTextBox1试试看,你会明白的。或者你发现如何引用那个被铸造的物体,让我知道 – Mobin 2010-05-14 15:36:38

0

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

+0

雅我已经这样做了...这就是为什么我花很多时间做这些检查之前问这样一个愚蠢的问题,但那是什么让我打扰...确认我会说如果panel2不存在,那么行7不会工作在我给出的代码中,是的,我已经检查过'name'是否存在 – Mobin 2010-05-14 14:02:54

相关问题