在这里遇到一个艰难的人。
我将一些值从Gridview Update Click事件传递到弹出的ASP.net页面,该页面根据在所选网格行的特定单元格中找到的句子数量动态构建占位符中的一系列文本框。
构建的框表示在所选行的单元格中找到的每个句子。每个句子都用于翻译,用户将数据输入到第二个动态生成的文本框中。
这一切都很有效。
现在我在第二个文本框旁边有一个列表框,有时会有一个或多个需要放入翻译句子的变量。我在列表框上设置了一个悬停菜单,以便我可以选择变量并将其插入第二个文本框中句子的末尾。
我的问题是在动态创建的列表框上生成click事件。像......那样......
Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
TextBox1.Text = TextBox1.Text & ListBox1.SelectedValue
ListBox1.SelectedValue = Nothing
End Sub
但是回想一下我的Listbox和其他文本框都是用这段代码完全动态构建的,其中num是在原始gridview行中找到的句子数...
Dim num As Integer = Session("lineNums") ' Number of sentences from original Gridview.
Dim MainContent As ContentPlaceHolder = CType(Page.Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)
Dim ph As PlaceHolder = DirectCast(MainContent.FindControl("PlaceHolder1"), PlaceHolder)
For I = 1 To num
' ***************************************************
' * Build English Header
Dim txtD As New TextBox
txtD.ID = "txtDEdit" & I.ToString("D2")
ph.Controls.Add(txtD)
Dim litCtrlD As New Literal
litCtrlD.ID = "litCtrlD" & I.ToString("D2")
litCtrlD.Text = "<br />"
ph.Controls.Add(litCtrlD)
txtD.Text = "ENGLISH"
' ***************************************************
' * Build English Textbox
Dim txtA As New TextBox
txtA.ID = "txtAEdit" & I.ToString("D2")
ph.Controls.Add(txtA)
Dim litCtrla As New Literal
litCtrla.ID = "litCtrla" & I.ToString("D2")
litCtrla.Text = "<br />"
ph.Controls.Add(litCtrla)
' ***************************************************
' * Build Translator Header
Dim txtE As New TextBox
txtE.ID = "txtEEdit" & I.ToString("D2")
ph.Controls.Add(txtE)
Dim litCtrlE As New Literal
litCtrlE.ID = "litCtrlE" & I.ToString("D2")
litCtrlE.Text = "<br />"
ph.Controls.Add(litCtrlE)
txtE.Text = "TRANSLATION"
' ***************************************************
' * Build Translator Textbox
Dim txtB As New TextBox
txtB.ID = "txtBEdit" & I.ToString("D2")
ph.Controls.Add(txtB)
Dim litCtrl As New Literal
litCtrl.ID = "litCtrl" & I.ToString("D2")
ph.Controls.Add(litCtrl)
' ******************************
' * Variable selection box
Dim lstF As New ListBox
lstF.ID = "lstFEdit" & I.ToString("D2")
ph.Controls.Add(lstF)
Dim litCtrlF As New Literal
litCtrlF.ID = "litCtrlF" & I.ToString("D2")
ph.Controls.Add(litCtrlF)
' ******************************
' * Hover Control Variable selection box
Dim lstG As New ListBox
lstG.ID = "lstGEdit" & I.ToString("D2")
ph.Controls.Add(lstG)
Dim litCtrlG As New Literal
litCtrlG.ID = "litCtrlG" & I.ToString("D2")
ph.Controls.Add(litCtrlG)
Next I
我正在尝试执行动态构建的lstG Listbox控件的Click事件。并填充动态构建的texbox控件txtB。
感谢您的帮助。
答案 0 :(得分:1)
您要找的是AddHandler statement。
您可以定义要处理的事件和委托(处理此事件的方法,必须具有正确的签名)。
因此,对于您的ListBox,我假设您要处理SelectedIndexChanged - 事件:
AddHandler lstG.SelectedIndexChanged, AddressOf lstGChanged
在这个类的某个地方有一个合适的处理程序:
Private Sub lstGChanged(sender As Object, e As EventArgs)
Dim triggeredFrom As ListBox = DirectCast(sender, ListBox)
End Sub
对于你的TextBox:
AddHandler txtA.TextChanged, AddressOf txtAChanged
处理程序:
Private Sub txtAChanged(sender As Object, e As EventArgs)
Dim triggeredFrom As TextBox = DirectCast(sender, TextBox)
End Sub