none
No se actualiza en pantalla un boton creado de forma dinamica RRS feed

  • Pregunta

  • Tengo un conjunto de controles (botones) creados en tiempo de ejecucion, la siguiente instruccion es la que uso:

    Form1._compu = New Button

    de aqui les pongo sus propiedades Name, Backcolor, Location, etc. Los cuales funcionan y cuando les doy clic a cada boton funcionan correctamente y puedo saber a cual boton  le doy clic con su AddHandler  respectivo y cmabia sus propiedades sin problema.

    El problema surge cuando por base de datos quiero modificar la propiedad backcolor de un boton que cumpla con ciertas caracteristicas y cambie de color, esto parece no funcionar ya que en pantalla no cambia de color, he usado refresh(), Application.DoEvents() y nada parece funcionar este es el codigo que utilizo:


                    Dim btns = Form1.Controls.Find(nombreboton, False)
                    btns(0).BackColor = Color.LightBlue
                    btns(0).Refresh()

    donde nombre boton lo saco de una base de datos.

    espero me puedan ayudar.

    saludos.

    • Cambiado Enrique M. Montejo lunes, 13 de abril de 2015 7:44 Pregunta relacionada con controles de Windows Forms.
    viernes, 10 de abril de 2015 1:02

Todas las respuestas

  • Vendría bien tener algo más de información.

    ¿Cómo agregas los botones al formulario?

    Al intentar cambiar el color ¿te da error o simplemente no te lo cambia?

    ¿La instrucción Find te devuelve un único control?

    viernes, 10 de abril de 2015 6:21
  • Saludos:

    El problema es que al declarar un nuevo objeto, este es un espacio diferente en la memoria, aunque se llame igual.

    Lo ideal es destruir el objeto actual y volverlo a crear con todas sus caracteristicas.

    Otra cosa que puedes hacer es declarer el objeto a nivel de la forma, instanciarlo en el Load y manipularlo en una funcion.

    Public Class Form1
        Dim dt_button As Button
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            dt_button = New Button
            With dt_button
                .Location = New Point(20, 20)
                .AutoSize = True
                .Text = "Boton de Prueba"
                .BackColor = Color.Maroon
                .ForeColor = Color.White
            End With
    
            Dim dt_buttonTest As New Button
            With dt_buttonTest
                .Location = New Point(20, 80)
                .AutoSize = True
                .Text = "Cambiar de color"
                .BackColor = Color.Maroon
                .ForeColor = Color.White
            End With
            AddHandler dt_buttonTest.Click, AddressOf fl_cambiar
            Me.Controls.Add(dt_buttonTest)
            Me.Controls.Add(dt_button)
    
        End Sub
    
        Private Sub fl_cambiar()
            dt_button.BackColor = Color.Black
        End Sub
    End Class

    Espero ayude.

    JOSE LUIS


    Dios NO los llamo LAS DIEZ RECOMENDACIONES

    miércoles, 15 de abril de 2015 20:17