2012-01-24 10 views
1

ここで厳しいものがあります。動的に作成されたリストボックスコントロールのイベントハンドラ

Gridview Update Clickイベントの一部の値を、選択したグリッド行の特定のセルで見つかった文章の数に基づいてプレースホルダ内に一連のテキストボックスを動的に構築するポップアップASP.netページに渡します。

ビルドされたボックスは、選択した行のセルにある各センテンスを表します。各センテンスは翻訳のために提示され、ユーザは第2の動的に生成されたテキストボックスにデータを入力する。

これはすべて素晴らしいです。

今は、2番目のテキストボックスの横にリストボックスがあります.1つ以上の変数があり、翻訳された文章に配置する必要があります。私は変数を選択し、2番目のテキストボックスに文の最後に挿入できるように、リストボックスの上にホバーメニューを設定しました。

私の問題は、動的に作成されたリストボックスでクリックイベントを生成しています。何かのように....

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 

しかし、私のリストボックスや他のテキストボックスがすべて完全に動的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リストボックスコントロールのクリックイベントを実行しようとしています。そして動的に構築されたtexboxコントロールtxtBを実装します。

ありがとうございました。

答えて

1

あなたが探しているのはAddHandler statementです。

ここで、処理するイベントとデリゲートを定義します(このイベントを処理するメソッドには正しい署名が必要です)。

AddHandler lstG.SelectedIndexChanged, AddressOf lstGChanged 

そして、このクラスのどこかに適切なハンドラ:

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

そして、あなたのTextBoxのために:

は、だからあなたのListBoxのために私はあなたがSelectedIndexChanged - イベントを処理することを前提としてい

AddHandler txtA.TextChanged, AddressOf txtAChanged 

ハンドラ:

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

@Marc:同じ手順です。編集: –

+0

各コントロールのAddHandler行をどこに配置するかわかりません。 – htm11h

+0

@Marc:どこに作成しているのですか。 –

関連する問題