繁体   English   中英

在DataRepeater_DrawItem事件期间检索位于Panel上的.Text文本框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM