在DataRepeater_DrawItem事件

时间:2019-06-14 13:15:46

标签: vb.net-2010 datarepeater ondrawitem

我正在使用DataRepeater的DrawItem事件来基于.Text内容更改文本框的.BackColor和.ForeColor。除非文本框位于面板上,否则此方法效果很好。如果该文本框位于面板上,那么我将返回此异常:“对象引用未设置为对象的实例。”它表示“ e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text”没有值。单步执行代码即可确认。

但是...如果我只是将文本框滑出面板,那么它就可以正常工作。我的Google-Fu使我失败了。我想念什么?

其他信息: Visual Studio 2010专业版,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 :(得分:0)

回答我自己的问题,以防将来使别人困惑:

当控件位于面板上时,从代码角度来看,它嵌套在面板中。因此,您必须先引用面板控件,然后再引用实际上要更改的控件。因此,我不得不追逐我的陈述,这样写:

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

其中 panel_RecordDetails 是面板,而 txt_AWQRecordStatus 是该面板上的文本框。也许有一种更简单的方法可以做到这一点,但我将继续努力下去。