在 DataRepeater_DrawItem 事件期间检索位于面板上的文本框的 .Text
Retrieving .Text of Textbox located on Panel during DataRepeater_DrawItem event
我正在使用 DataRepeater 的 DrawItem 事件根据 .Text 内容更改文本框的 .BackColor 和 .ForeColor。这工作得很好,除非文本框位于面板上。如果文本框在面板上,那么我将返回此异常:"Object reference not set to an instance of an object." 它表示 "e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text" 没有值。单步执行代码确认。
但是...如果我只是将该文本框从面板上滑出,那么它就可以正常工作。我的 Google-Fu 让我失望了。我错过了什么?
附加信息:
Visual Studio 2010 专业,VB.Net targeting.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 是该面板上的文本框。可能有更简单的方法来做到这一点,但我会取得胜利并继续前进。
我正在使用 DataRepeater 的 DrawItem 事件根据 .Text 内容更改文本框的 .BackColor 和 .ForeColor。这工作得很好,除非文本框位于面板上。如果文本框在面板上,那么我将返回此异常:"Object reference not set to an instance of an object." 它表示 "e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text" 没有值。单步执行代码确认。
但是...如果我只是将该文本框从面板上滑出,那么它就可以正常工作。我的 Google-Fu 让我失望了。我错过了什么?
附加信息: Visual Studio 2010 专业,VB.Net targeting.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 是该面板上的文本框。可能有更简单的方法来做到这一点,但我会取得胜利并继续前进。