none
Controls.Add suma botones lento VB.NET RRS feed

  • Pregunta

  • hola Tengo el siguiente codigo en VB.NET , para carga los botones de los materiales para un sistema touch, pero en ciertas computadoras carga lento y demora el sistema, alguien me puede ayudar a optimizar este codigo es un desafio poder optimizarlo

    GRACIAS

    Dim Z As Integer = 0

            intpanel = 1
            Dim rTabla As DataTable
            rTabla = materiales.mostrar_MaterialesActivos()
            Dim rFila As DataRow
            Dim I As Integer = 1
            Dim Y As Integer = 1
            Dim X As Integer = 0
            Dim w As Integer = 100 

    Dim rFila As DataRow
            Dim I As Integer = 1
            Dim Y As Integer = 1
            Dim X As Integer = 0
            Dim w As Integer = 100

            For Each rFila In rTabla.Rows

                'Aqui se Carga el primer panel

                If X < 21 Then
                    myButton = New Button
                    myButton.Size = New System.Drawing.Size(90, 55)
                    myButton.Location = New System.Drawing.Point(Y, I)
                    myButton.Text = rFila.Item("strName")
                    Controls.Add(myButton)
                    myButton.Tag = rFila.Item("idMaterial")
                    myButton.TabStop = False
                    Me.PanelMateriales.Controls.Add(myButton)
                    AddHandler myButton.Click, AddressOf myButtonClick
                End If


                I = I + 56
                X = X + 1
                If X = 7 Then
                    Y = 91
                    I = 1
                End If
                If X = 14 Then
                    Y = 180
                    I = 1
                End If
                If X > 21 Then
                    ' Y = 236
                    ' I = 6
                    arrayMateName(Z) = rFila.Item("strName")
                    arrayMateNro(Z) = rFila.Item("idMaterial")
                    Z = Z + 1
                End If
            Next


            If arrayMateName(0).Trim <> "" Then





                I = 1
                Y = 1
                X = 0



                Dim h As Integer
                For h = 0 To 99



                    If arrayMateName(h) Is Nothing Then
                        Exit For
                    End If
                    myButton = New Button

                    myButton.Size = New System.Drawing.Size(90, 55)
                    myButton.Location = New System.Drawing.Point(Y, I)
                    myButton.Text = arrayMateName(h)
                    'myButton.BackColor = Color.Gold
                    Controls.Add(myButton)

                    myButton.Tag = arrayMateNro(h)
                    myButton.TabStop = False
                    If h < 21 Then
                        intpanel = 2
                        Me.Panel2Paso.Controls.Add(myButton)
                    Else
                        If h < 42 Then
                            intpanel = 3
                            Me.Panel3PAso.Controls.Add(myButton)
                        Else
                            intpanel = 4
                            Me.Panel4Paso.Controls.Add(myButton)
                        End If
                    End If
                    AddHandler myButton.Click, AddressOf myButtonClick

                    I = I + 56
                    X = X + 1
                    If X = 7 Then
                        Y = 91
                        I = 1
                    End If
                    If X = 14 Then
                        Y = 180
                        I = 1
                    End If
                    If X = 21 Then
                        I = 1
                        Y = 1
                        X = 0
                    End If
                Next
            End If

    carga una rt

    martes, 14 de abril de 2015 2:31

Respuestas

  • Hay un par de sugerencias para optimizar la carga de botones.

    La primera es que en lugar de añadir los botones uno por uno llamando a elpanel.Controls.Add dentro de un bucle, construye un List de botones y luego añádelos todos de golpe al panel con una única instrucción usando elpanel.Controls.AddRange.

    Y la otra sugerencia es que desactives el repintado de pantalla llamando a SuspendLayout antes de comenzar a añadir los botones y luego lo reactives al final llamando a ResumeLayout.

    martes, 14 de abril de 2015 6:55