动态创建的Listbox控件的事件处理程序

时间:2012-01-24 18:48:01

标签: asp.net vb.net

在这里遇到一个艰难的人。

我将一些值从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。

感谢您的帮助。

1 个答案:

答案 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