【问题标题】:Event handler for dynamically created Listbox control动态创建的列表框控件的事件处理程序
【发布时间】:2012-01-24 18:48:00
【问题描述】:

这里有一个艰难的。

我将一些值从 Gridview 更新 Click 事件传递到弹出的 ASP.net 页面,该页面根据在所选网格行的特定单元格中找到的句子数在占位符中动态构建一系列文本框。

构建的框代表在所选行的单元格中找到的每个句子。每个句子都用于翻译,用户将数据输入到第二个动态生成的文本框中。

这一切都很好。

现在我在第二个文本框旁边有一个列表框,它有时有 1 个或多个变量需要放入翻译的句子中。我在列表框上设置了一个悬停菜单,以便我可以选择变量并将其插入到第二个文本框中的句子末尾。

我的问题是在动态创建的列表框上生成点击事件。有点像....

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 列表框控件的 Click 事件。并填充动态构建的 texbox 控件 txtB。

感谢所有帮助。

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    您正在寻找的是AddHandler statement

    您可以在此处定义要处理的事件和委托(处理此事件的方法,必须具有正确的签名)。

    所以对于您的 ListBox,我假设您要处理 SelectedIndexChanged-Event:

    AddHandler lstG.SelectedIndexChanged, AddressOf lstGChanged
    

    在这个类的某个地方有一个合适的处理程序:

    Private Sub lstGChanged(sender As Object, e As EventArgs)
        Dim triggeredFrom As ListBox = DirectCast(sender, ListBox)
    End Sub
    

    对于你的文本框:

    AddHandler txtA.TextChanged, AddressOf txtAChanged
    

    还有处理程序:

    Private Sub txtAChanged(sender As Object, e As EventArgs)
        Dim triggeredFrom As TextBox = DirectCast(sender, TextBox)
    End Sub
    

    【讨论】:

    • 不确定在哪里放置每个控件的 AddHandler 代码行。
    • @Marc:就在你创建它们的地方。
    • 我是否需要在页面初始化事件或页面加载中执行此操作,我在这两个地方都创建了控件,以便我可以保持视图状态。
    • 我可以使用它,但它需要回发。我需要在列表框中的单击事件上触发回帖。有任何想法吗?好的,我找到了,现在让它开始尝试填充文本框。
    • 我明白了,谢谢你的帮助@Tim 仍然有一些问题,因为我的控件是根据记录中元素的数量在循环中创建的。但我想我可以弄清楚。我添加了一个悬停菜单,但它只出现在第一个控件上,还需要动态创建它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2011-11-03
    • 2011-01-01
    相关资源
    最近更新 更多