Italian gestione selec case

anallie0

Active Member
Licensed User
Longtime User
sono costretto a dividere un select case troppo grande in vari select case più piccoli.
qualcuno sa se è possibile saper se il valore case è true o false.
cioè scorro il primo select case se non trovo nulla passo al secondo, per fare questo pensavo di analizzare il case per decidere cosa fare.
 

LucaMs

Expert
Licensed User
Longtime User
Urgh... sarà l'ora o è la contorsione... asp che ci penso :)

Non vedo il vantaggio di "suddividere...", perché, alla fine, stanno nella stessa routine (ma, come ho scritto sopra...!)

Uhm... forse intendi dire "primo blocco select compreso in un certo range, secondo in un altro"?

"qualcuno sa se è possibile saper se il valore case è true o false." ??? Dipende dai tuoi valori, no? Se il confronto è True, esegue il codice di quel Case, altrimenti analizza gli altri Case.

Ti aiuterei volentieri ma se non mi fai un esempio di dati da usare, non ci arrivo :( (oltretutto non funziona esattamente come in VB.Net).
 

LucaMs

Expert
Licensed User
Longtime User
AAAAhhhh tu hai "splittato" (bleah, che brutta parola :)) la tua domanda: metà qui, in italiano e metà in inglese, grrrr... ora guardo il tuo progetto così capisco meglio ;)

Come non detto: non è il progetto ma una immagine.

Allora ribadisco: senza conoscere il tipo di dati in tutti quei Case, è difficile darti una risposta. In VB.Net puoi usare Case 5 to 100, ad esempio (e, se non ricordo male, in B4A questo non è previsto)
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Uh, ma io ho una parte del tuo progetto.

Ora, che faccio, ti rispondo sia qui che "lì"?

Per iniziare, puoi caricare le listview da file (ti consiglio di usare le Map).

Crei con un editor (Notepad) un file di testo e lo metti nei Files (finisce nella File.DirAssets, che è a sola lettura, eh)
Poi lo leggi nel tuo codice, caricando la listview.
Invece di:
B4X:
lista.AddTwoLinesAndBitmap("Bilirubina indiretta BI", "", sangue )

usi:
B4X:
    Dim mapSanque As Map
    mapSanque.Initialize
    mapSanque = File.ReadMap(File.DirAssets, "sangue.txt")

    For i = 0 To mapSanque.Size - 1
        lista.AddTwoLinesAndBitmap(mapSanque.GetKeyAt(i), mapSanque.GetValueAt(i), urine)
    Next

Chiaramente, dovrai suddividere i files per tipo, visto che usi una immagine. Oppure crei un file a 3 "campi", compreso il nome dell'immagine; ma in questo caso non puoi caricare la mapSangue in quel modo (almeno credo, visto che troverebbe un terzo elemento).

Eh, sto continuando a "leggere" il tuo progetto... la faccenda dei Case.

Mi spiace darti una cattiva notizia :): il metodo giusto, sarebbe quello di usare un db SQLite.
Con ALMENO una tabella (se non pretendi una cosa perfetta).

Tipo:

Tabella Esami con i campi:
NomeEsame, Descrizione, ValUomo, ValDonna, TipoVal (e qui una tabella esterna relazionata andrebbe meglio ma non è obbligatoria), per TestoSu TestoGiu, vedi tu (che poeta, hehehe): direi Cause1 e Cause2? boh. Puoi anche aggiungere un campo col nome dell'immagine, benché, ad occhio, basterebbe "s2" per sangue2.png e così via o, meglio ancora, selezionarla da codice a seconda del TipoVal o altro.
Dato che rendi visibili/invisibili alcune icone e righe, serve anche almeno un campo per discriminare queste situazioni (o sempre da codice, a seconda di qualche campo).
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Intanto, senza usare db, puoi risparmiare molte righe di codice in questo modo (anche se dovrai sudare un pochino, hehehe).

Invece di scrivere in ogni Case:
B4X:
    Case "Adrenalina"
        iconatitolo.Bitmap = LoadBitmap(File.DirAssets, "urine2.png")
        labeltitolo.Text=esame
        labeldescrizione.Text="Ormone naturale: è una sostanza liberata dai surreni. Stimola il metabolismo, scinde il glicogeno in glucosio, restringe le piccole arterie della pelle e degli organi interni, ma dilata quelle dei muscoli e del cuore."
        valuomo.text="0,1- 65"
        valdonna.text="0,1- 65"
        tipoval.text="µg/24h"
        testosu.Text="Feocromocitoma, Ipertensione, Sindrome di Cushing, Neuroblastoma."
        testogiu.Text="Morbo di Addison, Morbo di parkinson, Sindrome di Waterhouse, Intervento chirurgico."

usa una sub routine con i parametri necessari; per esempio (non li conosco tutti!)

B4X:
    ' non caricare ogni volta LoadBitmap(File.DirAssets, "urine2.png")
    ' fai: Dim bmpUrine2 as Bitmap = Load...
    Case "Adrenalina"
        ImpostaEsame(bmpUrine2, esame, "Ormone naturale...", _
                        "0,1 - 65", "0,1 - 65", _
                        "µg/24h", _
                        "Feocromocitoma, Ipertensione,...", _
                        "Morbo di...")

Sub ImpostaEsame(bmpTitolo As Bitmap, strTitolo As String, strDescrizione As String, _
                      strValUomo As String, strValDonna As String, _
                      strTipoVal As String, strCause1 As String, strCause2)

    iconatitolo.Bitmap = bmpTitolo
    labeltitolo.Text = strTitolo
    labeldescrizione.Text = strDescrizione
    valuomo.Text = strValUomo
    valdonna.Text = strValDonna
    tipoval.Text = strTipoVal
    testosu.Text = strCause1
    testogiu.Text = strCause2

End Sub
 
Last edited:

anallie0

Active Member
Licensed User
Longtime User
Grazie LucaMs, i tuoi consigli sono scuola per me. ;)
Il problema dell'errore che avevo postato anche sul forum inglese è dovuto al limite di java che impone un massimo per ogni sub di 64K.
Ho risolto accodando varie sub che contengono i vari select case. In effetti avevo pensato di creare delle routine per la gestione della disposizione della visualizzazione va ci sono troppe varianti che devo decidere di volta in volta a secondo dei valori (PS ho già inserito 600 casi e il solo pensiero di riscriverli.....:confused:)

Fortunatamente ho una variabile che è sempre presente e posso utilizzarla per accodare i vari select. è per questo che chiedevo se era possibile sapere se il case aveva trovato un caso valido oppure no, ma non so se è possibile. Tipo if case.value=true
 
Last edited:
Top