none
Eventos en controles creados en tiempo ejecución RRS feed

  • Pregunta

  • Buenas noches,

    Estoy creando una serie de controles en tiempo de ejecución y quiero asignarles eventos. Los controles los crea, pero no asigna el evento o el evento no se ejecuta por alguna razón que desconozco. Todos los posts que he mirado sobre el tema repiten, una y otra vez, la misma forma como en teoría están creados éstos.

    Aunque un poco largo, creo interesante pasar el código:

                Dim lblHeader(10) As prsLabel
                Dim newLabel As prsLabel
                Dim neuBox As prsTextBox
                Dim txtHeader(10) As prsTextBox
                Dim newCombo As persComboBox
                Dim cmbHeader(10) As persComboBox

                Dim nHead As Integer = 0

                For nHead = 0 To DataGrid.headersNumberGrid - 1
                    newLabel = New prsLabel
                    lblHeader(nHead) = newLabel
                    lblHeader(nHead).Name = "lblHeader_" & (nHead).ToString
                    lblHeader(nHead).Text = DataGrid.headersText(nHead).ToString
                    headersTlp.Controls.Add(lblHeader(nHead), (nHead + 1), 0)
                    If TypeOf CType(DataGrid.headersControl(nHead), Control) Is prsTextBox Then
                        neuBox = New prsTextBox
                        txtHeader(nHead) = neuBox
                        With txtHeader(nHead)
                            .Tag = nHead
                            .Name = "txtHeader_" & nHead.ToString
                            .Writing = CBool(DataGrid.headersIsWriting(nHead))
                        End With
                        AddHandler neuBox.Enter, AddressOf All_TextBox_Enter
                    Else
                        newCombo = New persComboBox
                        cmbHeader(nHead) = newCombo
                        With cmbHeader(nHead)
                            .Name = "cmbHeader_" & nHead.ToString
                            .Tag = nHead
                            .SelectedIndex = -1
                        End With
                        AddHandler newCombo.Enter, AddressOf All_Combos_Enter
                    End If
                    headersTlp.Controls.Add(CType(DataGrid.headersControl(nHead), Control), (nHead + 1), 1)

                Next

    prsTexbox, persComboBox son controles personalizados y Writing una propiedad del TextBox personalizados

    El evento al que llama el textBox es éste:

        Private Sub All_TextBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim box As prsTextBox = DirectCast(sender, prsTextBox)
            Dim Text As String = box.Name & ": " & box.Text
            MsgBox(Text)
        End Sub

    Gracias anticipadas y saludos

    lunes, 4 de enero de 2016 21:16

Respuestas

  • La forma en la que estás conectando los eventos es la correcta. Si no está funcionando, el problema debe de estar en algún otro sitio. Por ejemplo, teniendo en cuenta que son controles personalizados, tal vez haya algo dentro de la personalización que haga que no se estén disparando los eventos correctamente. ¿Es una herencia directa del control original? ¿Tal vez tiene dentro algún override de los "On..." de los eventos, y se te ha olvidado llamar al método base? ¿O quizá has "republicado" el evento en el control personalizado, y no lo estás disparando correctamente? 
    martes, 5 de enero de 2016 9:46

Todas las respuestas

  • La forma en la que estás conectando los eventos es la correcta. Si no está funcionando, el problema debe de estar en algún otro sitio. Por ejemplo, teniendo en cuenta que son controles personalizados, tal vez haya algo dentro de la personalización que haga que no se estén disparando los eventos correctamente. ¿Es una herencia directa del control original? ¿Tal vez tiene dentro algún override de los "On..." de los eventos, y se te ha olvidado llamar al método base? ¿O quizá has "republicado" el evento en el control personalizado, y no lo estás disparando correctamente? 
    martes, 5 de enero de 2016 9:46
  • Gracias Alberto por tu respuesta,

    Los controles personalizados heredan directamente del control original y sólo modifica propiedades de apariencia. En todo caso, he sustituido el TextBox personalizado por el original y tampoco funciona. Seguiré probando

    Saludos

    martes, 5 de enero de 2016 11:57