2016-05-21 1 views
0

Я работаю над проектом, в котором я создал пользовательский элемент управления, и я пытаюсь его добавить и найти в групповом поле.C# - Изменить местоположение пользовательского элемента управления внутри GroupBox (возвращает исключение для ссылочной ссылки)

Действия по инициализации и добавлению элемента управления в поле работают нормально, но затем все, что я пытаюсь переместить или изменить размер элемента управления, вызывает исключение.

 //initialise using object in outputs collection 
     VitalsVisual vitalsVisual = vitalOutputs.getVitalsVisual(); 
     //add to relevant groupbox 
     grpbxIntraOp.Controls.Add(vitalsVisual); 
     //change location (coordinates within groupbox) 
     vitalsVisual.Location = new Point(249, 256); //THROWS EXCEPTION 
     //resize 
     vitalsVisual.Size = new Size(494, 342); //THROWS EXCEPTION IF REACHED 

Все я ни на одном из указанных линий «ссылка на объект не указывает на экземпляр объекта». Я действительно не понимаю этого, поскольку это указывает на то, что VitalsVisual vitalsVisual не инициализирован, но вызывается конструктор и команда Controls.Add() работает. Разумеется, если бы он не был инициализирован, эта команда создавала бы одно и то же исключение.

Может ли кто-нибудь определить, что может быть неправильным здесь? Было бы очень полезно толчок в правильном направлении!

Thanks, Mark

+0

Получает ли 'getVitalsVisual' фактическое значение или возвращает значение null? Что наследует элемент управления VitalsVisual? – kagelos

+0

Предлагаемый ответ объясняет, почему вы не смогли отладить это правильно, но на самом деле не решили _problem_, то есть у вас есть нулевая ссылка. Ознакомьтесь с обширным советом, найденным в отмеченном дубликате, о том, как отлаживать «NullReferenceException», чтобы вы могли перейти к точке, где ваш вопрос более конкретный, чем «почему я получаю это исключение?». Если у вас все еще есть проблемы в этот момент, задайте новый вопрос, в котором вы предоставили хороший [mcve], который надежно воспроизводит проблему, а также точное объяснение того, с чем конкретно вы сталкиваетесь. –

+0

Не дубликат, как он ошибочно предположил, что элемент управления мог добавить в коллекцию Controls, не может быть нулевым. Я объяснил, почему это неверное предположение. Отладка 'getVitalsVisual' - это следующий шаг, но не вопрос здесь, действительно .. – TaW

ответ

1

Интересно, но это по дизайну.

Тест:

Button button = null; 
this.Controls.Add(button); 
button.Location = Point.Empty; 

Это делает только то же самое, то есть он бросает на последней линии, а не когда добавление ..

Так что допускается пытается добавить null возражает против коллекции Controls.

я написал 'пытается', потому что на самом деле Controls.Addне удается спокойно:

Button button = null; 
Console.WriteLine(this.Controls.Count + " controls now."; 
this.Controls.Add(button); 
Console.WriteLine("Still " + this.Controls.Count + " controls."; 

Нет изменений в счете.

Взгляд на sources подтверждает это:

public virtual void Add(Control value) { if (value == null) return; ...

Так, чтобы подвести итог: ваша функция, безусловно, возвращает нулевой объект, но подавляется ошибка. Это ошибка или функция?

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