[RESUELTO]Cargar un listbox sin que afecte otros controles

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
jhonfredy
Mensajes: 47
Registrado: Vie Abr 08, 2016 6:50 pm

[RESUELTO]Cargar un listbox sin que afecte otros controles

Mensaje por jhonfredy »

[*]Buena tarde,
Tengo un listbox en un cuadro de dialogo, con el cual quiero que si un elemento no está en la lista se pueda agregar. Si oprimo el botón de ejecutar asignándole la macro de mostrar dialogo, el cuadro de dialogo muestra los controles, pero el listbox no carga los elementos a menos que los haya colocado manualmente en las propiedades del control. Este ejemplo se ve en el adjunto llamado prueba_sin_cargar_elementos. Si se cumple la condición dada para ingresar un nuevo elemento lo guarda

Pero si hago una macro para muestre los elementos en el listbox y esa la llamo desde la macro mostrar dialogo, los elementos si cargan, pero al dar guardar, no se guarda nada a pesar de que se cumpla con la condicion dada para ingresar un elemento nuevo. Este ejemplo se ve en el adjunto llamado prueba_con_elementos_cargados.

Alguien me puede ayudar diciendo que estoy haciendo mal? La idea es que los items se vayan agregando en tiempo de ejecución y no se tenga que estar cerrando el cuadro de dialogo para anexarlo.

Quedo pendiente.

Muchas gracias
Adjuntos
prueba_sin cargar_elementos.ods
(13.14 KiB) Descargado 149 veces
prueba_con_elementos_cargados.ods
(13.13 KiB) Descargado 159 veces
Última edición por jhonfredy el Jue Feb 13, 2020 3:55 pm, editado 1 vez en total.
OpenOffice 3.1 en Windows Vista
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Cargar un listbox sin que afecte otros controles

Mensaje por gustavodiaz00 »

Hola jhonfredy

Tenes un problema con la declaracion de variables, definis oDialago como global pero en la subrutina CuadroLista1() la volvés a definir como local.

Ya que el dialogo lo cargas en la subrutina CuadroLista1 no es necesario cargarlo en la subrutina Mostrar_Dialogo.

Código: Seleccionar todo

Sub Mostrar_Dialogo()
'-------------------------------------------------------------------
   'DialogLibraries.LoadLibrary("Standard")
   'oDialogo=CreateUnoDialog(DialogLibraries.Standard.Dialogo)
    Call CuadroLista1  
   
End Sub
Y en la subrutina cuadroLista1 eliminás la declaración de oDialago

Código: Seleccionar todo

Sub CuadroLista1()
 Dim i as Long
 Dim xDato As Variant
 'Dim oDialogo As Object
 Dim oControl As Object 
 Dim nRow As Long
     DialogLibraries.LoadLibrary( "Standard" )
     oDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName("Dialogo") )
     
     oControl = oDialogo.getControl("ListBox1")    
    for i = 0 to 9
		 xDato = ThisComponent.Sheets(0).GetCellByPosition(0,i).String
  		 oControl.AddItem(xDato ,i)
        
         next  
    oDialogo.Execute()  
End Sub  
Con esas modificaciones funciona
LibreOffice 6.1 en KDE Neon
jhonfredy
Mensajes: 47
Registrado: Vie Abr 08, 2016 6:50 pm

RESUELTO Re: Cargar un listbox sin que afecte otros controle

Mensaje por jhonfredy »

Buen día, muchas gracias gustavodiaz00 por la ayuda. En efecto funcionó.

Adjunto el ejemplo de cómo quedó. Lo adecué para que se ordenaran los ítems nuevos.

Muchas gracias
Adjuntos
pruebamodificado.ods
(13.67 KiB) Descargado 192 veces
OpenOffice 3.1 en Windows Vista
Responder