2012-07-02 2 views
0

всякий раз, когда я пытаюсь добавить tileSlider в сетку, вызывается NRE. Я не могу объяснить, почему, надеюсь, кто-то из вас может мне помочь.nullReferenceException Добавление объекта в сетку

EDIT2: tileSlider является таможенный контроль, представленная здесь: http://tileslider.codeplex.com/ Я пытался использовать его в своем приложении и не удалось реализовать это в C# -кода позади.

код:

private void addNormalTiles() 
    { 
     foreach (KeyValuePair<TileSlider, int[]> slider in (App.Current as App).normalTiles) 
     { 
      TileSlider x = slider.Key; 
      x.Size = 228; 
      Grid.SetColumnSpan(x, 2); 
      Grid.SetRowSpan(x, 2); 
      Grid.SetRow(x, slider.Value[0]); 
      Grid.SetColumn(x, slider.Value[1]); 
      ContentPanel.Children.Add(x); 
     } 
    } 

благодаря

EDIT:

System.NullReferenceException wurde nicht behandelt. 
    Message=NullReferenceException StackTrace: at  
    ScottIsAFool.Controls.TileSlider.TileSlider_Loaded(Object sender, RoutedEventArgs e) 
    at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate  
    handlerDelegate, Object sender, Object args) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, 
    Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) 
+0

возможно дубликат [Что такое NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –

ответ

1

Ну это трудно понять, учитывая код, который вы написали. Трассировка стека поможет. Возможные варианты:

  • App.Current не может быть App (литая лучше, чем при использовании as здесь, учитывая, что вы используете его безоговорочно)
  • App.Current может быть пустым
  • App.Current.normalTiles
  • slider.Key мог be null
  • Grid не может быть
  • slider.Value cou л.д. быть пустым
  • ContentPanel может быть пустым
  • ContentPanel.Children может быть пустым

Трассировка стека должна дать вам некоторые помощь определить, какой из них является случай. Разумное использование отладчика (поставить точку останова в операторе foreach) также должно помочь.

+0

лучше? System.NullReferenceException wurde nicht behandelt. Сообщение = NullReferenceException StackTrace: на ScottIsAFool.Controls.TileSlider.TileSlider_Loaded (Object отправителя, RoutedEventArgs е) в MS.Internal.CoreInvokeHandler.InvokeEventHandler (Int32 typeIndex, делегат handlerDelegate, отправитель Object, Object арг) в MS.Internal .JoltHelper.FireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) – roqstr

+0

@roqstr: Важная часть получает * номер строки *, чтобы вы знали, в какую строку она не попала. С другой стороны, ваш метод не упоминается в этой трассе стека ... что такое TileSlider_Loaded? –

+0

, похоже, входит в класс tileSlider, упакованный в DLL и еще не тронутый мной. – roqstr

1

Вставьте точку останова в верхней части метода, пройдите через нее по строкам и просмотрите значение каждого объекта непосредственно перед тем, как запустить эту строку (либо в окне просмотра, либо путем наведения указателя мыши на экземпляр). Вы ищете, когда значение этой переменной/экземпляра равно null.

Я хотел бы начать с:

(App.Current as App).normalTiles 

Эта линия может иметь 3 вещи неправильно с ним: App.Current равно нулю, App.Current as App дает нуль, поскольку .Current является нулевым или не App или normalTiles равна нулю.

+0

он также падает, когда я просто использую это: ContentPanel.Children.Add (новый TileSlider()); – roqstr

+0

@roqstr В этом случае: 'ContentPanel' может быть null или' Children' может быть нулевым, если вы имеете в виду, что получаете NRE, когда говорите «сбой». –

+0

не может быть contentPanel или детьми, потому что это работает: ContentPanel.Children.Add (новый TextBox()); – roqstr

2

Я думаю, что одна из этих проблем с панелью может быть вашей проблемой. Из примечаний к документации;

  • Не используйте эту коллекцию с производными классами Panel; вместо этого используйте коллекцию InternalChildren.

  • Это свойство возвращает null, если панель связана данными.

http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.aspx

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