2010-05-14 1 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

+0

Что вы делаете с именем? Его невозможно рассказать, не зная подробностей. Просто присоедините отладчик и перейдите по каждой строке, где вы получите элемент управления. Один из них является нулевым. – Nix

+0

Как и Nix говорит, перейдите по строкам, и вы найдете ошибку ... это либо panel2.Controls [имя], либо панель2 сама ... хм ... возможно отправители null ???? – w4ik

ответ

4

Много ...

Использование String.Format(), чтобы сделать это немного яснее. Это нормально, чтобы не использовать StringBuilder для этого, но очень сложно понять, что вы пытаетесь сделать.

Кроме того, такие вещи, как

(DateTimePicker)sender 

не должны повторяться. Бросьте один раз и повторно используйте литой объект.

DateTimePicker _castObject = (DateTimePicker)sender; 

Ошибка obj не 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».

+0

Можете ли вы помочь более подробно о том, что я должен использовать кастинг один раз ... но вы не думаете, что сделаете отдельный объект для этого, и я не смогу получить доступ к объекту в моей форме. – Mobin

+0

Вы используете отправителя 3x и литья 3x. Это требует дополнительной работы. Бросьте его один раз и используйте полученный результат. Что значит «не сможет получить доступ к объекту в моей форме»? Может быть, вы должны опубликовать больше метода, чтобы мы могли точно видеть, что вы пытаетесь выполнить. – StingyJack

+0

Я имел в виду, что если элемент управления с именем MaskedTextBox1 находится в вашей форме, и вы его отбрасываете и сохраняете в другом объекте, то вы не можете получить доступ к MaskedTextBox1 из этого объекта. Я попробовал то, что вы сказали, но потом я должен пересчитать, чтобы получить доступ к моему контролю. MaskedTextBox1 попробуйте, вы поймете это. Или вы обнаружите, как ссылаться на то, что на литой объект дайте мне знать – Mobin

0

Убедитесь, что вы правильно сформировали «имя», и существует контроль с таким именем. И эта панель2 не является нулевой.

+0

Я сделал это ... вот почему я трачу много времени на эти проверки, прежде чем задавать такой глупый вопрос, но это то, что заставляет меня беспокоиться ... подтвердить, что я бы сказал, если panel2 не существует, тогда строка 7 не будет работать в моем заданном коде и да, я проверил «имя», существует – Mobin

 Смежные вопросы

  • Нет связанных вопросов^_^