Luiey Ichigo Ответов: 1

Переменная-это ничто при первой загрузке страницы. Почему?


Ребята,

Я создаю страницу WPF, которая показывает текущее местоположение устройства на карте на странице по умолчанию. Что мне странно, так это то, что мой журнал приложений захватил переменную, переданную функции, - это ничто, где перед тем, как она войдет в функцию, переменная "devloc" с be удерживает значение из настроек конфигурации, скажем, GF или LG из udt.devfloor.

Он появится, когда я точку останова на определяемый пользователем тип.devfloor, он будет пропускать это значение devloc и прыгаем на исключение непосредственно. Если я продолжу работать после его точки останова, он будет как цикл цикла экземпляра обратно, и цикл будет в порядке.

Исключение:-
{"Object reference not set to an instance of an object."}


Найдите мой поток ниже:-
Public Sub New()
        MyBase.New()
        Me.InitializeComponent()
        devloc= udt_config.devfloor
        ViewSelectedDeviceLoc(devloc, 100)
End Sub
Private Sub ViewSelectedDeviceLoc(ByVal floor As String, ByVal width As Integer)
    Try
        If floor.Contains("C/") Then '// this is where the floor become nothing
            img_maps.Source = obj_core.ReturnSpecificImage(mymapspath & "B1.png", width)
        Else
            img_maps.Source = obj_core.ReturnSpecificImage(mymapspath & floor & ".png", width)
        End If
        img_maps.Stretch = Stretch.Uniform
        img_maps.StretchDirection = StretchDirection.Both
    Catch ex As Exception
        strMsg = "[" & strlogpage & "] Error at view " & floor & " map 2. Ex:" & ex.Message '//exception direct here
        App.LogEvents(strMsg, EventLogEntryType.Error)
    End Try
End Sub


Что я уже пробовал:

Попытка повторно инициализировать переменную, если она ничего не делает:-

Если IsNothing(udt_config.devfloor) Затем
devloc= udt_config.devfloor
Конец, Если

Оно все то же. Это просто происходит в самый первый раз, когда приложение запускается и страница загружается в самый первый раз. Он не будет иметь

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Продолжайте идти назад в коде. Откуда взялась ценность "пола"? Он должен был быть передан из какого-то другого метода, который вызывал ViewSelectedDevice. Вот тут-то и пригодится просмотр трассировки стека.

Я предполагаю, что он пришел из вашего конструктора, когда вы "создали" новый экземпляр этого класса. В конструкторе у вас есть вот это:

Public Sub New()
        MyBase.New()
        Me.InitializeComponent()
        devloc= udt_config.kiosklevel
        ViewSelectedDeviceLoc(devloc, 100)
End Sub

Итак, почему "devloc" ничего не значит, когда он вызывает ViewSelectedDeviceLoc? Что делает udt_config.kiosklevel код делает так, что он ничего не возвращает?


Luiey Ichigo

Дейв,

Вот что меня интересует. Функция будет использоваться на одной странице, но на разных кнопках, поэтому каждая кнопка будет присваивать ее значение параметрам. Там будет кнопка LG, GF, L1, L2. Я пытаюсь переместить код в private sub. Но такое же исключение возникает при запуске программы и переходе на страницу карты.

Dave Kreskowiak

Я уже говорил вам, как найти проблему. Проследите трассировку стека обратно к вызывающему объекту, установите соответствующие точки останова и проверьте значения задействованных vriables. Вы должны проследить это значение ничто обратно к его источнику, чтобы выяснить, почему это ничто и не то значение, которого следует ожидать.

Мы не можем сделать это для вас.

Luiey Ichigo

Ладно, Дэйв, я понимаю. Теперь я хочу поделиться своей находкой. Я ставлю точку останова на devloc= udt_config.kiosklevel, и да, она передаст значение, и Я шагаю в каждую строку кода. Да пол с имеют значение.

Но если я удалю точку останова, которая будет работать нормально, ahaa devloc будет ничем.

Шагая через каждую строку, начните с присвоения значения devloc на точке останова, все хорошо. Уберите назад точку останова, ничего.

Я просто хочу знать,как эта проблема называется в программировании. Я ищу "значение wpf-это ничто при первой загрузке", и это просто статья какого-то VS. Может ошибиться в моих ключевых словах

Dave Kreskowiak

и вы никогда не найдете ничего похожего на то, что описываете.

Что такое udt_config.kiosklevel и код, стоящий за ним?

Luiey Ichigo

udt_config.kiosklevel-это строковая структура при первом запуске Application_Startup, которая извлекает настройки программы из файла App.Config..

Это была моя структура объявленная в глобальном модуле:-

< pre lang="VB.NET" >
Общественные udt_config как конфиг

Конфигурация публичной структуры
Тусклый киоскид как струна
Dim kioskloc как строка
Dim kiosklevel как строка
Конечная структура< / pre>

Dave Kreskowiak

Итак, какой код заполняет поля в этой структуре? Они не наполняют себя.

Luiey Ichigo

Он загрузит конфигурацию из файла settings. ini. Пример данных, которые будут заполнены в структуру:-

С помощью udt_config
. kioskid = " K001"
.kiosklevel = "ГФ"
.kioskloc = "А1"
Конец С