0

我正在使用 DataRepeater 的 DrawItem 事件来更改基于 .Text 内容的文本框的 .BackColor 和 .ForeColor 。这工作得很好,除非文本框位于面板上。如果文本框在面板上,那么我将返回此异常:“对象引用未设置为对象的实例。” 它表示“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
4

1 回答 1

0

回答我自己的问题,以防将来让其他人感到困惑:

当控件位于面板上时,从代码角度来看,它嵌套在其中。因此,您必须引用面板控件,然后是您实际尝试更改的控件。所以我不得不把我的陈述写成这样:

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

其中panel_RecordDetails是面板,而txt_AWQRecordStatus是该面板上的文本框。可能有一种更简单的方法可以做到这一点,但我会赢得胜利并继续前进。

于 2019-06-14T13:56:41.583 回答