Principales respuestas
Eventos en controles creados en tiempo ejecución

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 = 0For 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 SubGracias anticipadas y saludos
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?
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de enero de 2016 7:13
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?
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de enero de 2016 7:13
-
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