[Risolto] Pulsante Reset Campi Dialog

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

[Risolto] Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Ciao,
a qualcuno viene in mente come poter creare un ciclo che possa resettare tutti i campi txt e cbo in una finestra di dialogo?

Mi trovo a dover creare un pulsante reset, e siccome i campi sono molti, non trovo come fare a realizzare ciò che pensavo, ovvero eseguire una sorta di:

For Each txtField Or cboField in NomeDlg, Campo = ""

Spero di aver reso il concetto

Sto sbagliando strada?
Grazie mille
Ultima modifica di Biagio91 il lunedì 10 ottobre 2022, 16:52, modificato 1 volta in totale.
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Per quanto riguarda i cbo tramite un ciclo for each puoi verificare se i controlli presenti nel Dialog supportano il servizio

Codice: Seleziona tutto

"com.sun.star.awt.UnoControlComboBox"
in questo modo

Codice: Seleziona tutto

If ctrl.supportsService("com.sun.star.awt.UnoControlComboBox") then
   ctrl.Text = ""
end if
Invece per i textbox il discorso è diverso il servizio da loro supportato è lo stesso come per altri controlli tipo i numericField quindi viene più difficile raggrupparli, puoi usare il nome , cioè nominarli in maniera progressiva TextBox1, TextBox2 ect ect.
La macro potrebbe essere la seguente sia per i textbox che per i cbo

Codice: Seleziona tutto

 Dim ctrl As Object
   Dim oControls
   DialogLibraries.loadLibrary("Standard")
   oDialog = CreateUnoDialog(DialogLibraries.getByName("Standard").getByName("Dialog1"))
   oDialog.Execute()
   ...............
   ...............
for each ctrl in oDialog.getControls()
    IF ctrl.Model.Name LIKE "TextBox*" Or ctrl.Model.Name LIKE "cbo*" THEN 
       ctrl.Text = ""
    end if
next ctrl
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Mi andrebbe benissimo anche resettare TUTTI i campi, ho chiesto dei cbo e dei txt perché pensavo fosse più mirata come cosa visto che ho solo quelli nella dialog interessata; ma se esiste un comando per resettare tutti i campi contenuti in una finestra di dialogo ben venga, è proprio ciò che devo fare.

Mi pare di intuire qualcosa del genere

Codice: Seleziona tutto

Dim ctrl As Object

For each ctrl in oDialog.getControls()
       ctrl.Text = ""
next ctrl
Corretto?

Grazie mille
Ciao
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Basta provare, ma potresti avere problemi non è detto che tutti i controlli presenti nel Dialog abbiano la proprietà Text come i combo e le caselle di testo.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Ok, quindi teoricamente le combo e i text, che hanno la proprietà text, dovrebbero resettarsi tutti, corretto?
Ho provato, ma nella finestra di dialogo compilata in ogni campo (cbo+txt), sono spariti tutti i testi contenuti in tutti i campi txt e in tutti i campi etichetta.
per le combobox invece mi succede una cosa strana; ho 3 ComboBox , 2 delle quali si compilano tramite codice aggiungendo elementi, una invece prende il contenuto da un elenco inserito nelle sue proprietà, queste combobox appena citate, non si resettano. Stranamente però un'altra cbo presente nella stessa Dlg, che si compila da codice tramite aggiunta di elementi, si resetta completamente.

Non capisco come mai, dove sto sbagliando

Grazie mille
Ciao
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Pulsante Reset Campi Dialog

Messaggio da patel »

Hai fatto il controllo del nome come suggerito da Gaetano ?

Codice: Seleziona tutto

for each ctrl in oDialog.getControls()
    IF ctrl.Model.Name LIKE "TextBox*" Or ctrl.Model.Name LIKE "cbo*" THEN 
       ctrl.Text = ""
    end if
next ctrl
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

No, non posso purtroppo lasciare il nome TextBox.
Sto facendo qualche test, domani penso riuscirò a dare riscontro.

Intanto grazie mille
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Ok, quindi qui potrei risolvere con la soluzione removeItems suggerita al post:
viewtopic.php?t=11846
Vorrei procedere come segue

Codice: Seleziona tutto

Dim cboNome, cboCognome, cboAnnoAs, oDialog, oListBox  Object
Dim CampiDiTipoComboBox As Variant
Dim nCampiDiTipoComboBox, nCount As Integer

CampiDiTipoComboBox = Array (cboNome, cboCognome, cboAnno) 'ecc...
nCampiDiTipoComboBox = CampiDiTipoComboBox.Count

For i = 0 To nCampiDiTipoComboBox 
	oListBox = oDialog.GetControlByIndex(i)
	nCount = oListBox.getItemCount()
  	oListBox.removeItems( 0, nCount )
Next
ma sto sbagliando a impostare l'Array in qualche modo sto cercando info ma non riesco a concludere questa storia, un aiutino?
Grazie mille
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Non posso fare prove ma noto due errori.
1) Nel ciclo for, correggilo in questo modo

Codice: Seleziona tutto

For i = 0 To Ubound ( CampiDiTipoComboBox) 
altrimenti come hai fatto tu ma togliendo 1 in quanto l'array è a base zero quindi tre elementi sono 0-1-2, usando count fai un ciclo da 0 a 3.
2) oListBox = oDialog.GetControlByIndex(i) in questo modo non richiami i controlli presenti nell'array, cambia così

Codice: Seleziona tutto

oDialog.GetControl(i)
Per il resto credo non ci siano errori.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Ciao,
grazie mille, c'è qualcosa che non va non riesco a capire:

Codice: Seleziona tutto

Dim cboNome, cboCognome, cboAnnoAs, oListBox  Object
Dim CampiDiTipoComboBox As Variant
Dim nCampiDiTipoComboBox, nCount As Integer

cboCognome = oDialog.GetControl("Cognome")
cboNome = oDialog.GetControl("Nome")
cboAnno = oDialog.GetControl("Anno")

CampiDiTipoComboBox = Array (cboNome, cboCognome, cboAnno) 'ecc...

For i = 0 To Ubound(CampiDiTipoComboBox)
	oListBox = oDialog.GetControl(i)
	nCount = oListBox.getItemCount()
  	oListBox.removeItems( 0, nCount)
Next
ErrorHandler:
msgBox Err
End Sub
Mi sembra che non si colleghi l'indice con l'elemento dell'Array

Grazie mille
Ciao
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Così andiamo a tentoni, ti ho detto che non posso fare prove senza file, se crei un esempio possiamo vedere cosa non funziona.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Ciao,
File preparato; presumo che il mio problema sia proprio nella costruzione del ciclo for next con l'utilizzo di valori presi da un intervallo.
Allegati
SvuotaComboBox.ods
(11.58 KiB) Scaricato 28 volte
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Cambia la macro così

Codice: Seleziona tutto

CampiDiTipoComboBox = Array ("Cognome", "Nome", "Anno") 'ecc...
'nCampiDiTipoComboBox = CampiDiTipoComboBox.Count
uCampiDiTipoComboBox = Ubound(CampiDiTipoComboBox)

PRINT uCampiDiTipoComboBox

For i = 0 To uCampiDiTipoComboBox 
	oListBox = oDialog.GetControl(CampiDiTipoComboBox(i))

	nCount = oListBox.getItemCount()

  	
  	oListBox.removeItems( 0, nCount )
Next
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Biagio91
Messaggi: 232
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Pulsante Reset Campi Dialog

Messaggio da Biagio91 »

Funziona,
ho visto dove sbagliavo, oltre alla ripetizione dell'oggetto del campo, mancava una parte fondamentale per correlare l'indice all'array, ovvero

Codice: Seleziona tutto

oListBox = oDialog.GetControl(CampiDiTipoComboBox(i))
Grazie mille per l'aiuto :super:
Ciao
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Pulsante Reset Campi Dialog

Messaggio da Gaetanopr »

Bravo, esatto, nel mio messaggio precedente frettolosamente mi era sfuggito.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi