我正在使用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
答案 0 :(得分:0)
回答我自己的问题,以防将来使别人困惑:
当控件位于面板上时,从代码角度来看,它嵌套在面板中。因此,您必须先引用面板控件,然后再引用实际上要更改的控件。因此,我不得不追逐我的陈述,这样写:
e.DataRepeaterItem.Controls(panel_RecordDetails.Name).Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black
其中 panel_RecordDetails 是面板,而 txt_AWQRecordStatus 是该面板上的文本框。也许有一种更简单的方法可以做到这一点,但我将继续努力下去。