Newsgroup: it.comp.appl.access
Titolo: Ordinamento Record crescente/decrescente

Buongiorno,
 
Ho un pulsante che mi permette di ordinare per peso crescente o decrescente 
i record della form .
ora questo pulsante ha come proprietà IMMAGINE  ed è l'immagine fornita da access ovvero A-Z freccia su e freccia giù , quando viene cliccato il pulsante funziona perfettamente ma l'immagine  A-Z freccia su e freccia giù rimane 
la stessa .
Chiedevo se c'è la possibilità che questa immagine cambiasse con Z-A Freccia giù e freccia su 
 
L'evento su clic del pulsante è =OrdinaFormContinue()
 
si può vedere qui :
 
https://we.tl/t-rXefqn3hJ3
 
 
Giuseppe
 
 
 
 
 

Si devi cambiarla da codice... il problema è che non riesci a recuperare facilmente la risorsa, si può ma con troppo codice commesso, quindi le soluzioni sono 2:
1) usi 2 controlli immagine, non visibili, con precaricate l'icona che devi scaricarli da qualche sito e poi da codice passi l'immagine al CommandButton... 
2) usi 3 commandbutton, 2 nascosti che sfrutti per ricavare l'immagine ed 1 visibile...
 
Su click vai a definire se applichi il filtro e che immagine caricare...
 
Me!controlloAttivo.Picturedata=Me!ctlDown.picturedata
 
Quando rimuove il criterio che corrisponde ad ordinamento crescente... carichi ctlUp con l'altra immagine.
 
@Alex

Ho provato per un po a capirci qualcosa  ma capisco solo che per me è troppo complicato , ci rinuncio , 
 
Ugualmente sempre 
grazie 
 


una soluzione rapida se ti accontenti di non usare immagini:
Crei una etichetta al posto del pulsante, e ci scrivi "A->Z"
 
Sul evento click dell'etichetta
 
if tuaEtichetta.caption="A->Z" then
	'ordini in modo Crescente
	'...
	tuaEtichetta.caption="Z->A"
else
	'ordini in modo Decrescente
	'...
	tuaEtichetta.caption="A->Z"
end if
 
poi l'etichetta puoi tramite colore e rilievo renderla simile a un pulsante
 
ciao
BFS
 
 

 BFS
 
 
Ho provato quanto mi hai detto ,
Ho creato un etichetta   LbAZ   l'etichetta funziona ok  effettua l'operazione richiesta 
A->Z  /  Z->A
solo che per ordinare la ricerca  sulla form  A->Z  /  Z->A
ora sull'evento del pulsante clic ho :  =OrdinaFormContinue()
come lo trasferisco sull'evento clic dell'etichetta 


tasto destro sull'etichetta, proprietà, evento  su "su click"
è esattamente come per un pulsante
 
ciao
 

 ciao
 
Si questo lo so e già fatto, sull'evento click ho inserito la tua Routine
Private Sub LbAZ_Click()
 
If LbAZ.Caption = "A->Z" Then
    ' Ordina crescente
    '....
    LbAZ.Caption = "Z->A"
 
 Else
    ' ordina in modo decrescente
    '....
    LbAZ.Caption = "A->Z"
 
    End If
 
End Sub
 
e questa funziona , mi cambia la visualizzazione dell'etichetta da A->Z
a Z->A  e viceversa 
ma per dare l'imput alla form e ordinare il campo CodiceProdotto o il campo DescrizioneProdotto?
 
Ora con il pulsante ho la ruotine su evento Click =OrdinaFormContinue()
e su corrente della form ho questo :
 
 
'Su Click Intestazione Colonna Form Continua, ordina in senso crescente o decrescente
Public Function OrdinaFormContinue()
  '
  Dim ActForm As Form, StrAName As String, StrPName As String
  Dim Intesta As Control, strIntesta As String
 
  On Error GoTo GestErr
 
  Set ActForm = Screen.ActiveForm
 
  If ActForm.DefaultView = 0 Then  'Individua Oggetto SottoMaschera
          StrAName = ActForm.Name
          StrPName = Nz(
Screen.ActiveControl.Parent.Name
, StrAName)
          If StrPName <> StrAName Then Set ActForm = Screen.ActiveControl.Parent.Form
  End If
 
  Set Intesta = Screen.ActiveControl
  '<NomeCampo>_Intesta -----> <NomeCampo>
  strIntesta = Left(
Screen.ActiveControl.Name
, Len(
Screen.ActiveControl.Name
) - 8)
 
  ActForm.Controls(strIntesta).SetFocus
 
  'Nota: le costanti AcCmdSort operano sulla proprietà OrderBy della Form
  If InStr(1, Intesta.Caption, "»") = 0 And InStr(1, Intesta.Caption, "«") = 0 Then
         DoCmd.RunCommand acCmdSortAscending
         Call ResetIntestaCmd(ActForm)
         Intesta.Caption = strIntesta & " »"
  ElseIf InStr(1, Intesta.Caption, "«") <> 0 Then
         DoCmd.RunCommand acCmdSortAscending
         Call ResetIntestaCmd(ActForm)
         Intesta.Caption = strIntesta & " »"
  Else
         DoCmd.RunCommand acCmdSortDescending
         Call ResetIntestaCmd(ActForm)
         Intesta.Caption = strIntesta & " «"
  End If
 
  Set Intesta = Nothing
  Set ActForm = Nothing
  Exit Function
 
GestErr:
  If Err = 2046 Then
        MsgBox "Impossibile ordinare campi Memo/Ole", vbInformation, ""
  Else
        MsgBox Err.Number & "  " & Err.Description
  End If
End Function
 
---------------------------------------------------------------------------
 
'Elimina Flag d'ordinamento "»" o "«" dall'intestazione di una qualunque colonna
Public Sub ResetIntestaCmd(ActForm As Form)
  '
  Dim Ctr As Control
 
  For Each Ctr In ActForm.Controls
       If Ctr.ControlType = acCommandButton Then
            If InStr(1, Ctr.Caption, "»") <> 0 Or InStr(1, Ctr.Caption, "«") <> 0 Then
                 Ctr.Caption = Left(Ctr.Caption, Len(Ctr.Caption) - 2)
            End If
       End If
  Next Ctr
End Sub
 
 
puoi vedere il link :  
https://we.tl/t-FkGu1M8Shb
 
 
 
Ciao e Grazie


tutto il codice che hai messo nel pulsante lo tagli e lo incolli dentro 
sul click della label dopo l' if then else endif
 
 
in modo date che quando clicky sulla label, cambi la scritta ed esegui 
l'ordinamento
 
ciao

 ciao
 
Ho fatto come mi hai detto ma non funziona ,nella proprietà su click del pulsante c'è solo scritto   =OrdinaFormContinue()
 
questo è invece dopo aver incollato dopo (if then else endif  )
tutto il codice che è nella form su Corrente che fa funzionare il pulsante 
 
Private Sub LbAZ_Click()
 
If LbAZ.Caption = "A->Z" Then
            ' Ordina crescente
 
            LbAZ.Caption = "Z->A"
 
 Else
             ' ordina in modo decrescente
 
            LbAZ.Caption = "A->Z"
 
    End If
 
'---------------------------------------------------------------------------       




il codice che hai sul pulsante,  lo devi mettere in coda a quello della 
label...
ma senza riportare intestazione e end sub
 
deve diventare una funzione unica sul evento click della label
 
 
 
 
Private Sub LbAZ_Click()
 
If LbAZ.Caption = "A->Z" Then
             ' Ordina crescente
 
             LbAZ.Caption = "Z->A"
 
  Else
              ' ordina in modo decrescente
 
             LbAZ.Caption = "A->Z"
 
     End If
 
   '

   Exit SUB
 
GestErr:
   If Err = 2046 Then
         MsgBox "Impossibile ordinare campi Memo/Ole", vbInformation, ""
   Else
         MsgBox Err.Number & "  " & Err.Description
   End If
 
End SUB