Получение .Text текстового поля, расположенного на панели, во время события DataRepeater_DrawItem - PullRequest
0 голосов
/ 14 июня 2019

Я использую событие DrawItem объекта DataRepeater для изменения .BackColor и .ForeColor текстового поля на основе содержимого .Text. Это прекрасно работает, только если текстовое поле находится на панели. Если текстовое поле находится на панели, я возвращаю это исключение: «Ссылка на объект не установлена ​​для экземпляра объекта». Это означает, что «e.DataRepeaterItem.Controls (txt_AWQRecordStatus.Name) .Text» не имеет значения. Проход по коду подтверждает это.

НО ... если я просто сдвину это текстовое поле с панели, тогда оно будет работать просто отлично. Мой Google-Fu подвел меня. Чего мне не хватает?

Дополнительная информация: Visual Studio 2010 Professional, таргетинг на VB.Net .NET 4.0

        'Set Record Status Color
        Select Case e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text
            Case "Working"
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.Green
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.White
            Case "Sleep"
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.Red
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.White
            Case Else
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.White
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black
        End Select

1 Ответ

0 голосов
/ 14 июня 2019

Ответьте на мой собственный вопрос в случае, если в будущем это кого-то озадачит:

Когда элемент управления расположен на панели, он вкладывается в него с точки зрения кода.Таким образом, вы должны ссылаться на панель управления, а затем на элемент управления, который вы на самом деле пытаетесь изменить.Поэтому мне пришлось преследовать свои высказывания так:

e.DataRepeaterItem.Controls(panel_RecordDetails.Name).Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black

Где panel_RecordDetails - это панель, а txt_AWQRecordStatus - это текстовое поле на этой панели.Возможно, есть более простой способ сделать это, но я собираюсь взять победу и двигаться дальше.

...