[英]Retrieving .Text of Textbox located on Panel during DataRepeater_DrawItem event
我正在使用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
回答我自己的问题,以防将来困惑别人:
当控件位于面板上时,它从代码角度嵌套在控件内部。 因此,您必须引用面板控件,然后引用您实际尝试更改的控件。 所以我不得不追逐我的陈述,如下所示:
e.DataRepeaterItem.Controls(panel_RecordDetails.Name).Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black
凡panel_RecordDetails是面板,并且txt_AWQRecordStatus是面板上的文本框中。 可能有一种更简单的方法可以做到这一点,但我要取胜并继续前进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.