none
Por que me ejecuta el MsgBox 6 veces RRS feed

  • Pregunta

  • Buenas al añadir una fila me ejecuta el MsgBox 6 veces

    Sub Calc_Ibus()
            Dim OG As Decimal = DensidadDO.Value '* 1000 ' DENSIDAD INICIAL
            Dim Tiempo As Decimal = DGV_Lupulos.CurrentRow.Cells(2).Value 'Tiempo de hervido del lupulo
            Dim Peso As Decimal = DGV_Lupulos.CurrentRow.Cells(1).Value 'Peso del lupulo en gramos
            Dim Onza As Decimal = 0.035274 '28.34952 'Lo que vale 1 gramo en onzas
            Dim Galon As Decimal = 3.785412 ' Lo que vale 1 Galon en litros
            Dim volumen As Decimal = 21 'Volumen final del lote
            Dim Galones As Decimal = volumen / Galon 'Volumen final en galones
            Dim Factor_Gravedad As Decimal = 1.65 * Math.Pow(0.000125, (OG - 1)) 'Factor Gravedad
            Dim Factor_Tiempo As Decimal = ((1 - Math.Exp(-0.04 * Tiempo)) / 4.14) 'Factor Tiempo
            '' ''Dim Utilizacion As Double = 1.65 * Math.Pow(0.000125, (OG - 1)) * ((1 - Math.Exp(-0.04 * Tiempo)) / 4.14) 'Factor Gravedad y Factor Tiempo
            Dim Utilizacion As Decimal = Factor_Gravedad * Factor_Tiempo
            Dim oz As Decimal = Onza * Peso  'Peso del lupulo pasado a onzas
            Dim AA As Decimal = DGV_Lupulos.CurrentRow.Cells(8).Value   '15 'Alpha Acidos del lupulo
            Dim AA_decimal As Decimal = 15 / 100 ' Alpha Acidos espresados en decimal
            Dim ibu As Decimal = Utilizacion * (8.5 * (AA / 100) * 1000) / volumen 'Calcula Ibus
            Dim mgl_aaa As Decimal = (AA_decimal * oz * 7490) / Galones ' Alpha Acidos en mg/l formula no metrica
            Dim mgl As Decimal = (AA_decimal * Peso) * 1000 / volumen ' Alpha Acidos en mg/l formula metrica
            Dim AAUs As Decimal = oz * AA
            LabelX40.Text = Math.Round(ibu, 2)
            DGV_Lupulos.CurrentRow.Cells(5).Value = Math.Round(ibu, 2)
            'Dim IBUs = Utilizacion * (oz * (AA / 100) * 7490) / (volumen / Galon)
            MsgBox("Og: " & OG & Chr(13) & _
                 "Utilizacion: " & Math.Round(Utilizacion, 3) & Chr(13) & _
                 "mgl_aaa: " & mgl_aaa & Chr(13) & _
                 "mgl: " & mgl & Chr(13) & _
                 "AAUs: " & AAUs & Chr(13) & _
                         "Ibu: " & Math.Round(ibu, 2))
        End Sub
    Private Sub DGV_Lupulos_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DGV_Lupulos.CellValueChanged
            Dim row As DataGridViewRow = DGV_Lupulos.CurrentRow 'PARA QUE NO DE ERROR CELLVALUECHANGE
            If row IsNot Nothing Then 'PARA QUE NO DE ERROR CELLVALUECHANGE
                For a = 0 To Dgv_Tabla_Lupulos.RowCount - 1
                    If DGV_Lupulos.CurrentRow.Cells(0).Value Is Nothing Then
                    Else
                        If Dgv_Tabla_Lupulos.Rows(a).Cells(1).Value.Contains(DGV_Lupulos.CurrentRow.Cells(0).Value) Then
    
    
                            Label2.Text = Replace(Dgv_Tabla_Lupulos.Rows(a).Cells(2).Value, " %", "")
                            DGV_Lupulos.CurrentRow.Cells(1).Value = 20 ' PESO DEL LUPULO POR DEFECTO
                            DGV_Lupulos.CurrentRow.Cells(2).Value = 60 ' TIEMPO DE HERVIDO DEL LUPULO POR DEFECTO
                            DGV_Lupulos.CurrentRow.Cells(3).Value = "Hervido" 'TIPO DE AÑADIDO DEL LUPULO POR DEFECTO
                            DGV_Lupulos.CurrentRow.Cells(4).Value = "Flor" 'TIPO DE LUPULO AÑIDO POR DEFECTO
                            DGV_Lupulos.CurrentRow.Cells(8).Value = Replace(Dgv_Tabla_Lupulos.Rows(a).Cells(2).Value, " %", "") 'AÑADE EL ALPHA ACIDO DEL LUPULO
    
                            
    
                        End If
    
                        
                    End If
    
                Next
                Calc_Ibus()
            End If
    
        End Sub
    
    

    Gracias

    lunes, 1 de agosto de 2016 16:10

Respuestas

  • Buenas tardes

    Por lo que veo, la función 'Calc_Ibus()' la llamas desde el evento CellValueChanged de un datagrid. Y estás cambiando el valor de 5 celdas (y la que editas tu a mano 6!), y en un bucle que recorre todas las líneas.

    Como el evento salta cada vez que modificas el valor de una celda es normal que te salte el mensaje varias veces

    Saludos



    • Editado JavierRomero lunes, 1 de agosto de 2016 16:22
    • Marcado como respuesta JETET lunes, 1 de agosto de 2016 20:23
    lunes, 1 de agosto de 2016 16:20
  • JETET,

    Debes restringir la acción a una sola columna:

    <...>
    If row IsNot Nothing Then
            If row.Columns[e.ColumnIndex].Name == "NombreCol") Then
                    <...>



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta JETET lunes, 1 de agosto de 2016 20:23
    lunes, 1 de agosto de 2016 16:21

Todas las respuestas

  • Buenas tardes

    Por lo que veo, la función 'Calc_Ibus()' la llamas desde el evento CellValueChanged de un datagrid. Y estás cambiando el valor de 5 celdas (y la que editas tu a mano 6!), y en un bucle que recorre todas las líneas.

    Como el evento salta cada vez que modificas el valor de una celda es normal que te salte el mensaje varias veces

    Saludos



    • Editado JavierRomero lunes, 1 de agosto de 2016 16:22
    • Marcado como respuesta JETET lunes, 1 de agosto de 2016 20:23
    lunes, 1 de agosto de 2016 16:20
  • JETET,

    Debes restringir la acción a una sola columna:

    <...>
    If row IsNot Nothing Then
            If row.Columns[e.ColumnIndex].Name == "NombreCol") Then
                    <...>



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta JETET lunes, 1 de agosto de 2016 20:23
    lunes, 1 de agosto de 2016 16:21