Spanish [Solucionado] Problemas al Dimensionar Editext

JMMF

Member
Licensed User
Longtime User
Hola.

Estoy Desarrollando Una serie de EDITEX y no Detecta el úntimo, en el evento FocusChanged.
Alguien me podria explicar Porque.

Perdon, no se como se Insertar bien el codigo ...

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
'JMMF
'Compras
   
End Sub

Sub Globals
    Dim GD As GradientDrawable
    Dim Id As InputDialog                        'Trabaja con libreria Dialogs
    Dim Anterior As String
      Dim RecuperarFoco As Boolean
   
    Dim A As List
    Dim m As Map
   
    Dim ControlLista As List
    Dim ControlMapa As Map

    Dim IdAnterior As String = ""
    Dim Control As Boolean = False
   
    Private EditSerie (11) As EditText
    Private Edit As EditText
    Private PnlCompras As Panel
    Private BotonGuardar As Button
   
End Sub

Sub Activity_Create(FirstTime As Boolean)
    CrearLayoutNueva
End Sub

Sub Activity_Resume
    Pasillos.Awake.KeepAlive(True) 'la pantalla nunca se para
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    Pasillos.Awake.ReleaseKeepAlive 'deja que la pantalla se pueda parar
End Sub

Sub CrearLayoutNueva
'Titulo de Activity
    Activity.Title = "Compras"
'Crea el PnlNueva
    GD.Initialize("TL_BR",Array As Int(Colors.DarkGray,Colors.Black))
    PnlCompras.Initialize("")
    PnlCompras.Background=GD
    Activity.AddView(PnlCompras,0,0,100%x,100%y)
    PnlCompras.Visible=True

'Crea el ControlLista
    ControlLista.Initialize

    ControlMapa.Initialize       
    ControlLista.Add(ControlMapa) ' Index(0) es = Nada
   
    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Proveedor")
    ControlMapa.put("Texto", "Introduzca un nombre de proveedor")
    ControlMapa.put("Caracteres", 20)
    ControlMapa.put("Hint", "")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Id.")
    ControlMapa.put("Texto", "Introduzca un Id de bombilla")
    ControlMapa.put("Caracteres", 3)
    ControlMapa.put("Hint", "A, B1, c9...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Tipo")
    ControlMapa.put("Texto", "Introduzca el tipo de bombilla")
    ControlMapa.put("Caracteres", 10)
    ControlMapa.put("Hint", "Led, Bajo consumo...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Watios")
    ControlMapa.put("Texto", "Introduzca los watios de la bombilla")
    ControlMapa.put("Caracteres", 4)
    ControlMapa.put("Hint", "4w, 6w...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Lúmenes")
    ControlMapa.put("Texto", "Introduzca los Lúmenes")
    ControlMapa.put("Caracteres", 6)
    ControlMapa.put("Hint", "320Lm, 280Lm...")
    ControlLista.Add(ControlMapa)
       
    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Color")
    ControlMapa.put("Texto", "Introduzca el color de la bombilla")
    ControlMapa.put("Caracteres", 10)
    ControlMapa.put("Hint", "3000k, 4000k...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Angulo")
    ControlMapa.put("Texto", "Introduzca el angulo")
    ControlMapa.put("Caracteres", 4)
    ControlMapa.put("Hint", "90º, 120º...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Cantidad")
    ControlMapa.put("Texto", "Introduzca la cantidad de bombillas")
    ControlMapa.put("Caracteres", 4)
    ControlMapa.put("Hint", "100, 200...")
    ControlLista.Add(ControlMapa)
   
    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Precio")
    ControlMapa.put("Texto", "Introduzca el precio por bombilla")
    ControlMapa.put("Caracteres", 4)
    ControlMapa.put("Hint", "1.30, 2.00...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa.put("Titulo", "Observaciones")
    ControlMapa.put("Texto", "Introduzca las observaciones")
    ControlMapa.put("Caracteres", 4)
    ControlMapa.put("Hint", "")
    ControlLista.Add(ControlMapa)
   
   

'Crea los label
    Dim LabelSerie (11) As Label
    For y = 1 To 10
        Dim Label As Label
        ControlMapa = ControlLista.get (y)
        Label.Initialize("Label")
        Label.TextSize = 15
        Label.TextColor = Colors.LightGray
        Label.Color = Colors.Transparent
        Label.text = ControlMapa.Get ("Titulo") & " "
        If y = 1 Then
            Label.Gravity = Gravity.CENTER
            PnlCompras.AddView(Label,0%x,0%y,100%x,PnlCompras.Height/13)
        else if y = 2 Then
            Label.Gravity = Gravity.RIGHT
            PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + ((LabelSerie (y-1).Height) * 2),PnlCompras.Width/3,PnlCompras.Height/13)
        else if y = 10 Then
            Label.Gravity = Gravity.CENTER
            PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + LabelSerie (y-1).Height,100%x,PnlCompras.Height/13)
        Else
            Label.Gravity = Gravity.RIGHT
            PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + LabelSerie (y-1).Height,PnlCompras.Width/3,PnlCompras.Height/13)
        End If
        LabelSerie (y) = Label   
    Next
   
'Crea los Edit
    For y = 1 To 10
        Dim Edit As EditText
        ControlMapa = ControlLista.get (y)
        Edit.Initialize("Edit")
        Edit.TextSize = 15
        Edit.TextColor = Colors.White
        Edit.Color = Colors.Transparent
        Edit.Tag = y
        Edit.Hint = ControlMapa.Get ("Hint")
        Edit.SingleLine = True
        Select y
            Case 1 ' Proveedor
                Edit.Gravity = Gravity.CENTER
                PnlCompras.AddView(Edit,0%x,LabelSerie (1).Top + LabelSerie (1).Height,100%x,PnlCompras.Height/13)
            Case 8 ' Cantidad
                Edit.InputType = Id.INPUT_TYPE_NUMBERS
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
            Case 9 ' Precio
                Edit.InputType = Id.INPUT_TYPE_DECIMAL_NUMBERS
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
            Case 10 ' Observaciones
                Edit.Gravity = Gravity.CENTER
                PnlCompras.AddView(Edit,0%x,LabelSerie (10).Top + LabelSerie (10).Height,100%x,PnlCompras.Height/13)
            Case Else
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
        End Select
        EditSerie(y) = Edit
    Next
   
'Crea un BotonGuardar
    Dim Bmp As BitmapDrawable
    Dim sld As StateListDrawable
    BotonGuardar.Initialize("BotonGuardar")
    Bmp.Initialize(LoadBitmap(File.DirAssets,"BotonGuardarVerde.png"))
    sld.Initialize
    sld.AddState(sld.State_Disabled,Bmp)
    sld.AddState(sld.State_Enabled,Bmp)
    BotonGuardar.Background=sld
    PnlCompras.AddView(BotonGuardar,75%x,85%y,45dip,45dip)

    EditSerie(1).RequestFocus
End Sub

Sub Edit_FocusChanged (HasFocus As Boolean)
    Edit = Sender
      If RecuperarFoco = True And Anterior <> Edit.Tag Then Return
      RecuperarFoco = False
      Anterior=Edit.Tag

'Cuando entra   
    If HasFocus = True Then
        Edit.SelectionStart=Edit.Text.Length
    End If
'Cuando sale
      If HasFocus = False Then
        ControlMapa = ControlLista.get (Edit.tag)
        If Edit.text.Length>ControlMapa.Get ("Caracteres") Then
            Edit.text = Edit.text.SubString2(0,ControlMapa.Get ("Caracteres"))
            BombillasModulo.SonidoSuena
            Msgbox(ControlMapa.Get ("Texto") & CRLF & " menor de " & ControlMapa.Get ("Caracteres") & " caracteres",ControlMapa.Get ("Titulo"))
             RecuperarFoco =True
              Anterior= Edit.Tag
              Edit.RequestFocus
              Return
        Else If Edit.Text.Trim.Length = 0  Then ' Comprueba si tiene algo escrito
            BombillasModulo.SonidoSuena
            Msgbox(ControlMapa.Get ("Titulo") & CRLF & "No puede ser una cadena vacia",ControlMapa.Get ("Titulo"))
            RecuperarFoco =True
              Anterior= Edit.Tag
            Edit.Text =""
              Edit.RequestFocus
              Return
        Else If ControlMapa.Get ("Titulo") = "Id."  Then ' Comprueba no se repita el Id.
            Dim m As Map
            For i=0 To  BombillaNueva.AProveedor.Size -1
                m = BombillaNueva.AProveedor.Get(i)
                If Edit.Text = m.Get("bdId.") Then
                    BombillasModulo.SonidoSuena
                    Msgbox(ControlMapa.Get ("Titulo") & CRLF & "No se puede duplicar","Clave duplicada")
                    RecuperarFoco =True
                      Anterior= Edit.Tag
                    Edit.Text =""
                      Edit.RequestFocus
                      Return
                Else
                    EditSerie(Edit.Tag).Text = Edit.Text
                End If
            Next
        Else
            EditSerie(Edit.Tag).Text = Edit.Text
        End If
      End If
End Sub

Sub BotonGuardar_Click
    Dim Guardar As Boolean = True
    For y = 1 To 10
        If EditSerie(y).Text.Trim.Length = 0  Then
            Guardar = False
            ControlMapa = ControlLista.get (y)
            BombillasModulo.SonidoSuena
            ToastMessageShow(ControlMapa.Get ("Titulo") & CRLF & "No puede ser una cadena vacia",False)
        End If
    Next
    If Guardar Then
        Dim Resultado As Int
        Resultado = Msgbox2("¿Guardamos los datos de la nueva compra?", "Guardar", "Si","No","",Pasillos.Imagen(3))
        If Resultado = DialogResponse.POSITIVE Then
            Compra_Nueva   
        End If
    End If
End Sub

Un saludo y muchas gracias
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Tu dimensionas la matriz de EditText asi:
B4X:
Private EditSerie (11) As EditText


Luego creas un bucle asi:
B4X:
For y = 1To10

Cuando lo dimensionas, al poner el valor 11 estas creando una matriz de 11 elementos pero que va del 0 (cero) al 10, no del 1 al 10

Cambia el bucle por:
B4X:
For y = 0 To 10
Y te funcionará

Saludos
 

JMMF

Member
Licensed User
Longtime User
Pues va ser que NO.
Sigue sin detectar el dato introducido en el EditSerie(9)
bgsoft. te paso las modificaciones.
Y tambien cuando introduzco un dato erroneo en el editserie(8) "Precio", me sale dos veces el MsgBox de aviso.
Hay que verde estoy...

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
'JMMF
'Compras
 
End Sub

Sub Globals
    Dim GD As GradientDrawable
    Dim TecladoSoft As IME                        'Muestra y esconde el teclado(Libreria IME)

    Dim Anterior As String
      Dim RecuperarFoco As Boolean
 
    Dim ControlLista As List
    Dim ControlMapa As Map
 
    Private EditSerie (10) As EditText'+++++++++++++++++++++++++++++++++++++++++++ Cambio ++++++++++++++++++++++++++++++
    Private Edit As EditText
    Private PnlCompras As Panel
    Private BotonGuardar As Button
    Private BotonBuscar As Button
 
End Sub

Sub Activity_Create(FirstTime As Boolean)
    TecladoSoft.Initialize("")
    CrearLayoutNueva
End Sub

Sub Activity_Resume
    Pasillos.Awake.KeepAlive(True) 'la pantalla nunca se para
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    Pasillos.Awake.ReleaseKeepAlive 'deja que la pantalla se pueda parar
End Sub

Sub CrearLayoutNueva
'Titulo de Activity
    Activity.Title = "Compras"
'Crea el PnlNueva
    GD.Initialize("TL_BR",Array As Int(Colors.DarkGray,Colors.Black))
    PnlCompras.Initialize("")
    PnlCompras.Background=GD
    Activity.AddView(PnlCompras,0,0,100%x,100%y)
    PnlCompras.Visible=True

'Crea el ControlLista
    ControlLista.Initialize
 
    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Proveedor","Texto":"Introduzca un nombre de proveedor","Caracteres":40,"Hint":"")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Id.","Texto":"Introduzca un Id de bombilla","Caracteres":3,"Hint":"A, B1, c9...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Tipo","Texto":"Introduzca el tipo de bombilla","Caracteres":20,"Hint":"Led, Bajo consumo...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Watios","Texto":"Introduzca los watios de la bombilla","Caracteres":4,"Hint":"4w, 6w...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Lúmenes","Texto":"Introduzca los Lúmenes","Caracteres":6,"Hint":"320Lm, 280Lm...")
    ControlLista.Add(ControlMapa)
     
    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Color","Texto":"Introduzca el color de la bombilla","Caracteres":6,"Hint":"3000k, 4000k...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Angulo","Texto":"Introduzca el angulo","Caracteres":4,"Hint":"90º, 120º...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Cantidad","Texto":"Introduzca la cantidad de bombillas","Caracteres":4,"Hint":"100, 200...")
    ControlLista.Add(ControlMapa)
 
    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Precio","Texto":"Introduzca el precio por bombilla","Caracteres":4,"Hint":"1.30, 2.00...")
    ControlLista.Add(ControlMapa)

    ControlMapa.Initialize
    ControlMapa = CreateMap("Titulo":"Observaciones","Texto":"Introduzca las observaciones","Caracteres":50,"Hint":"")
    ControlLista.Add(ControlMapa)

'Crea los label
    Dim LabelSerie (10) As Label'+++++++++++++++++++++++++++++++++++++++++++ Cambio ++++++++++++++++++++++++++++++++++++
    For y = 0 To 9'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Cambio ++++++++++++++++++++++++++++++++++++
        Dim Label As Label
        ControlMapa = ControlLista.get (y)
        Label.Initialize("Label")
        Label.TextSize = 15
        Label.TextColor = Colors.LightGray
        Label.Color = Colors.Transparent
        Label.text = ControlMapa.Get ("Titulo") & " "
        If y = 0 Then
            Label.Gravity = Gravity.CENTER
            PnlCompras.AddView(Label,0%x,0%y,100%x,PnlCompras.Height/13)
        else if y = 1 Then
            If BombillaNueva.NuevoProveedor Then
                Label.Gravity = Gravity.RIGHT
                PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + ((LabelSerie (y-1).Height) * 2),PnlCompras.Width/3,PnlCompras.Height/13)
            Else
                Label.Gravity = Gravity.CENTER
                PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + ((LabelSerie (y-1).Height) * 2),PnlCompras.Width,PnlCompras.Height/13)
            End If
        else if y = 9 Then
            Label.Gravity = Gravity.CENTER
            PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + LabelSerie (y-1).Height,100%x,PnlCompras.Height/13)
        Else
            Label.Gravity = Gravity.RIGHT
            PnlCompras.AddView(Label,0%x,LabelSerie (y-1).Top + LabelSerie (y-1).Height,PnlCompras.Width/3,PnlCompras.Height/13)
        End If
        LabelSerie (y) = Label 
    Next
 
'Crea los Edit
    For y = 0 To 9 '+++++++++++++++++++++++++++++++++++++++++++ Cambio ++++++++++++++++++++++++++++++++++++++++++
        Dim Edit As EditText
        ControlMapa = ControlLista.get (y)
        Edit.Initialize("Edit")
        Edit.TextSize = 15
        Edit.TextColor = Colors.White
        Edit.Color = Colors.Transparent
        Edit.Tag = y
        Edit.Hint = ControlMapa.Get ("Hint")
        Edit.SingleLine = True
        Select y
            Case 0 ' Proveedor
                Edit.Gravity = Gravity.CENTER
                PnlCompras.AddView(Edit,0%x,LabelSerie (0).Top + LabelSerie (0).Height,100%x,PnlCompras.Height/13)
            Case 7 ' Cantidad
                Edit.InputType = Edit.INPUT_TYPE_NUMBERS
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
            Case 8 ' Precio
                Edit.InputType = Edit.INPUT_TYPE_DECIMAL_NUMBERS
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
            Case 9 ' Observaciones
                Edit.Gravity = Gravity.CENTER
                PnlCompras.AddView(Edit,0%x,LabelSerie (9).Top + LabelSerie (9).Height,100%x,PnlCompras.Height/13)
           Case Else
                Edit.Gravity = Gravity.LEFT
                PnlCompras.AddView(Edit,PnlCompras.Width/3,EditSerie (y-1).Top + EditSerie (y-1).Height,PnlCompras.Width/1.5,PnlCompras.Height/13)
        End Select
        If BombillaNueva.NuevoProveedor = False Then
            Edit.Text = BombillaNueva.mProveedor.get("bd" & ControlMapa.Get("Titulo"))
            If Edit.Tag = 1 Then
                Edit.Visible = False
                LabelSerie(1).Text = LabelSerie(1).Text & "  " & BombillaNueva.mProveedor.get("bdId.")
            End If
        End If
        EditSerie(y) = Edit
    Next
 
'Crea un BotonGuardar
    Dim Bmp As BitmapDrawable
    Dim sld As StateListDrawable
    BotonGuardar.Initialize("BotonGuardar")
    Bmp.Initialize(LoadBitmap(File.DirAssets,"BotonGuardarVerde.png"))
    sld.Initialize
    sld.AddState(sld.State_Disabled,Bmp)
    sld.AddState(sld.State_Enabled,Bmp)
    BotonGuardar.Background=sld
    PnlCompras.AddView(BotonGuardar,75%x,75%y,45dip,45dip)
    BotonGuardar.Visible = False
 
'Crea un BotonBuscar
    If BombillaNueva.NuevoProveedor = False And BombillaNueva.mProveedor.get("bdConsumidas") <> 0 Then
        Dim Bmp As BitmapDrawable
        Dim sld As StateListDrawable
        BotonBuscar.Initialize("BotonBuscar")
        Bmp.Initialize(LoadBitmap(File.DirAssets,"ImagenBuscar.png"))
        sld.Initialize
        sld.AddState(sld.State_Disabled,Bmp)
        sld.AddState(sld.State_Enabled,Bmp)
        BotonBuscar.Background=sld
        PnlCompras.AddView(BotonBuscar,75%x,(PnlCompras.Height/13)*2,45dip,45dip)
    End If 
 
'Mostrar el teclado
    EditSerie(0).RequestFocus

End Sub

Sub Edit_FocusChanged (HasFocus As Boolean)
    Edit = Sender
      If RecuperarFoco = True And Anterior <> Edit.Tag Then Return
      RecuperarFoco = False
      Anterior=Edit.Tag

'Cuando entra 
    If HasFocus = True Then
        Edit.SelectionStart=Edit.Text.Length
    End If
'Cuando sale
      If HasFocus = False Then
        ControlMapa = ControlLista.get (Edit.tag)
        If Edit.text.Length>ControlMapa.Get ("Caracteres") Then
            Edit.text = Edit.text.SubString2(0,ControlMapa.Get ("Caracteres"))
            BombillasModulo.SonidoSuena
            Msgbox(ControlMapa.Get ("Texto") & CRLF & " menor de " & ControlMapa.Get ("Caracteres") & " caracteres",ControlMapa.Get ("Titulo"))
            RecuperarFoco =True
              Anterior= Edit.Tag
              Edit.RequestFocus
              Return
        Else If Edit.Text.Trim.Length = 0  Then ' Comprueba si tiene algo escrito
            BombillasModulo.SonidoSuena
            Msgbox(ControlMapa.Get ("Titulo") & CRLF & "No puede ser una cadena vacia",ControlMapa.Get ("Titulo"))
           RecuperarFoco =True
              Anterior= Edit.Tag
            Edit.Text =""
              Edit.RequestFocus
              Return
        Else If ControlMapa.Get ("Titulo") = "Id."  And BombillaNueva.NuevoProveedor = True Then ' Comprueba no se repita el Id.
            Dim m As Map
            For i=0 To  BombillaNueva.AProveedor.Size -1
                m = BombillaNueva.AProveedor.Get(i)
                If Edit.Text = m.Get("bdId.") Then
                    BombillasModulo.SonidoSuena
                    Msgbox(ControlMapa.Get ("Titulo") & CRLF & "No se puede duplicar","Clave duplicada")
                  RecuperarFoco =True
                      Anterior= Edit.Tag
                    Edit.Text =""
                      Edit.RequestFocus
                      Return
                Else
                    EditSerie(Edit.Tag).Text = Edit.Text
                End If
            Next
        Else
            EditSerie(Edit.Tag).Text = Edit.Text
        End If
      End If
End Sub

Sub Edit_EnterPressed
    'Muestra el BotonGuardar  
    For y = 0 To 8 '+++++++++++++++++++++++++++++++++++++++++++ Cambio Pero editSerie(9) Puede ser "" ++++++++++++++++
        If EditSerie(y).Text.Trim.Length = 0  Then
            BotonGuardar.Visible = False
            Return
        Else
            BotonGuardar.Visible = True
        End If
    Next
End Sub

Sub BotonGuardar_Click
    TecladoSoft.HideKeyboard
    Dim Resultado As Int
    If BombillaNueva.NuevoProveedor Then
        Resultado = Msgbox2("¿Guardamos los datos de la nueva compra?", "Guardar", "Si","No","",Pasillos.Imagen(3))
        If Resultado = DialogResponse.POSITIVE Then
            Compra_Nueva 
        End If
    Else
        Resultado = Msgbox2("¿Guardamos los cambios?", "Guardar", "Si","No","",Pasillos.Imagen(3))
        If Resultado = DialogResponse.POSITIVE Then
            Compra_Cambios 
        End If
    End If
End Sub

Sub BotonBuscar_Click
    StartActivity(Informe)
End Sub

Sub Compra_Nueva
    Pasillos.hc.Initialize("Modificar",Me)
    Dim MiSQL As String
    ProgressDialogShow("Guardando compra")'Abre la barra de progreso
    MiSQL="INSERT INTO bdCompras VALUES ('" & EditSerie(0).Text & "', '" & EditSerie(1).Text & "', '" & EditSerie(2).Text & "', '" & EditSerie(3).Text & "', '" & EditSerie(4).Text & "', '" & EditSerie(5).Text & "', '" & EditSerie(6).Text & "', '" & EditSerie(8).Text & "', '" & EditSerie(9).Text & "', '" & EditSerie(7).Text & "', '0')"
    Pasillos.hc.Download2(", Array As String("Operacion", Pasillos.hc.JobName, "IdOperario", Pasillos.Operador, "MiSQL", MiSQL))
End Sub

Sub Compra_Cambios
    Pasillos.hc.Initialize("Modificar",Me)
    Dim MiSQL As String
    ProgressDialogShow("Stok")'Abre la barra de progreso
    MiSQL="UPDATE bdCompras SET bdProveedor='" & EditSerie(0).Text & "', bdTipo='" & EditSerie(2).Text & "', bdWatios='" & EditSerie(3).Text & "', bdLúmenes='" & EditSerie(4).Text & "', bdColor='" & EditSerie(5).Text & "', bdAngulo='" & EditSerie(6).Text & "', bdPrecio=" & EditSerie(8).Text & ", bdCantidad=" & EditSerie(7).Text & ", bdObservaciones='" & EditSerie(9).Text & "' WHERE bdId.='" & BombillaNueva.mProveedor.get("bdId.") & "'"
    Pasillos.hc.Download2(", Array As String("Operacion", Pasillos.hc.JobName, "IdOperario", Pasillos.Operador, "MiSQL", MiSQL))
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        Dim res As String
        res = Job.GetString             
        Select res
            Case 1
                Msgbox("Usted no tiene" & CRLF & "permiso de escritura" & CRLF & "en la BD.",Pasillos.Operador)
                Activity.Finish
            Case 2
                ToastMessageShow("Datos guardados",True)                     
                Activity.Finish                 
        End Select
    Else
        Msgbox("Error: " & Job.ErrorMessage,"Error")
    End If
    ProgressDialogHide'Cierra la barra de progreso
    Job.Release
    Pasillos.hc.Release
End Sub

Que es lo que no veo...?
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Pues va ser que NO.
Sigue sin detectar el dato introducido en el EditSerie(9)
bgsoft. te paso las modificaciones.

Vayamos por faena :D , no puedo crear un proyecto nuevo, copiar el código y empezar a probar, me llevaria demasiado tiempo.

- Quita el:
B4X:
Dim EditSerie(10) As EditText

Cambialo por:
B4X:
Dim EditSerie as List
De esta forma tienes una lista de objeto (EditText) con todos sus valores

Cambia la asignación:
B4X:
EditSerie(y) = Edit
La asignación hazla justo antes del Select y , mayormente por que si luego vas a utilizarla y no tienes en cuenta la primera (que veo que la has tenido) te dará un error por que el indice 0 no existirá. De esta forma ese formato te valdrá para otros proyectos ;)

Por:
B4X:
EditSerie.Add(Edit)

- Cuando quieras cambiar los valores (el que sea) de esas entradas de texto puedes hacerlo asi:
B4X:
    Dim L As EditText
    L.Initialize("")
    L=EditSerie.Get(Indice del que quieres cambiar)
    L.Text="Nuevo Texto"

En los eventos del EdiText o de los Label puedes coger los valores asi:
B4X:
Dim b As EditText ' si es un label pon as Label
b = Sender
TextoDelEditex= b.text
TagDelEditex= b.Tag
...

Si quieres una forma facil de ir incrementado la altura, poner el ancho, etc, en vez de escribir tanto código, y que ademas te valdrá para mas adelante en otros proyectos y solo tendras que cambiar un valor, antes del bucle crea esto:

B4X:
Dim TopObjeto,LeftObjetoAs Int
Dim Ancho, Alto  as Double

TopObjeto = 0
LeftObjeto = PnlCompras.Width/3
Ancho = PnlCompras.Width/1.5
Alto = PnlCompras.Height/13

For y = 0To9'+++++++++++++++++++++++++++++++++++++++++++ Cambio ++++++++++++++++++++++++++++++++++++++++++Dim Edit AsEditText
ControlMapa = ControlLista.get (y)
Edit.Initialize("Edit")
Edit.TextSize = 15
Edit.TextColor = Colors.White
Edit.Color = Colors.Transparent
Edit.Tag = y
Edit.Hint = ControlMapa.Get ("Hint")
Edit.SingleLine = TrueSelect y
Case0' Proveedor Edit.Gravity = Gravity.CENTER
PnlCompras.AddView(Edit,LefObjeto,TopObjeto,Ancho,Alto) ' ESTA LINEA ES MAS FACIL DE COPIAR Y DE ENTENDER
TopObjeto = TopObjeto + Alto
Si tienes alguna variante la haces en el Selec Case, pero de esta forma ahorras mucho código y es mas facil ver los errores.

Este cambio tambien puedes hacerlo en los LabelSerie

IMPORTANTE:
No llames a un objeto por el nombre del objeto, añadele un 1 por ejemplo, posiblemente por esto no te funcionaba :D

B4X:
Dim Label As Label ' esto no es correcto

Dim Label1 As Label   ' esto seria mas correcto

Para que de un golpe de vista veas el codigo, puedes cambiar esto:
B4X:
If y = 0Then
Label.Gravity = Gravity.CENTER
PnlCompras.AddView(Label,0%x,0%y,100%x,PnlCompras.Height/13)
elseif y = 1Then
If BombillaNueva.NuevoProveedor Then
Label.Gravity
...
[CODE]
Por Select Case, no tendrás que seguir la secuencia de If Else que es muy facil equivocarte

Saludos
 
Last edited:

JMMF

Member
Licensed User
Longtime User
Pero que burro soy.
Me faltaba dimensionar el EdiText en el Evento FocusChanged
B4X:
Sub Edit_FocusChanged (HasFocus As Boolean)
    Dim Edit1 As EditText'+++++++++++++++++++++ LA OMISION DE ESTO ES EL ERROR +++++++++++++++++++++
    Edit1 = Sender
      If RecuperarFoco = True And Anterior <> Edit1.Tag Then Return
      RecuperarFoco = False
      Anterior=Edit1.Tag
Y por lo de la forma facil de ir incrementado la altura, poner el ancho, etc.
De lujo. Un 10 para ti.
Muchas gracias BgSoft.

Que Dios me lo bendiga.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Me alegro que lo solucionaras, acuerdate de cambiar esto que te dije:

B4X:
Dim Label As Label ' esto no es correcto

Dim Label1 As Label   ' esto seria mas correcto

Lo del 10 me parece excesivo, pero a veces un café o un like no está mal :p

Saludos
 
Top