Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Help ... non so nemmeno io come chiamarlo.

Avete presente la funzione msgbox?
Che quando si impostano le icone, o i tasti visibili
non si fa altro che aggiungere delle costanti e "sommarle" con il +?
Ok, l'esempio calza a pennello per quello che voglio fare io.
Ho una serie di routine e funzioni, che hanno la prima parte
bene o male quasi del tutto uguale. Quello da cui si differiscono
č solo qualche elemento in piů da controllare.
Nella fattispecie del mio caso, si tratta di textbox. Ora ho
routine 1 che deve controllare text1 + text2
routine 2 che deve controllare text1 + text2 + text3
routine 3 che deve controllare text2 + text3
a questo punto l'inesperienza su questo specifico punto dui vb mi ha portato
a scrivere tre routine separate che fanno il loro lavoro. Ma come
probabilmente fa il msgbox che confrontando la somma delle costanti
che gli sono state passate penso che potrei fare io.
Un primo approccio che mi č passato per la mente č quello di fare un type
public metterci dentro delle costanti con un numero che č sempre il
doppio del valore della costante precedente, quindi
fare una enorme select case che confronta
case 3 (sarebbe la somma della costante text1 + text2)
    fai questo
case 7 (somma di text1 + text2 + text3)
    fai quest'altro
case 6 (somma di text2 + text3)
    fai quest'altro ancora
il sistema č abbastanza efficace, tuttavia fatto per molti campi e somme di
valori
equivale ad una perdita di tempo allucinante.
Sono sicuro che si puň far meglio, forse con gli operatori bit-wise and e or
...
ma un primo tentativo di cercare di capire come lavorassero per confrontare
le variabili mi ha scoraggiato.
Soluzioni????
Ciao Andrea

io farei così (ma non ti fidare di me... ::)))))
gli operatori bit-wise di cui parli sarebbero and e or, in questyo caso,
giusto?
allora, ogni "elemento" sarebbe rappresentato da un bit, cioe da un numero
che è 2 elevato ad un altro numero (0,1,2,3,4...)
alla fine ti devi trovare un numero che è la somma di tutti gi elementi.
ad es.: NumSomma=(2^1)+(2^4), significa che devi esaminare gli elementi 1 e
4.
come fai a sapere, da NumSomma, quali elementi ci sono?
if NumSomma AND (2^1) then
    l'elemento 1 è da esaminare
elseif NumSomma AND (2^2) then
    l'elemento 2 è da esaminare
(...)
e così via.
era questo che intendevi?
MarioH

 wrote in message
news:99ibbd$19rp9$1...@ID-70152.news.dfncis.de...


Allora, questo potrebbe essere un esempio:
Private Enum eMyText
    emtNone          = 0
    emtPrimaText   = &H1
    emtSecondaText = &H2
    emtTerzaText      = &H4
     emtQuartaText    = &H8
     emtQuintaText     = &H10
      emtSestaText     = &H20
      ' ecc. &H40, &H80, &H100, ...
End Enum
Per valutare il bit impostato, mascheri il flag ricevuto con And:
If ((FlagRicevuto And emtQuintaText) = emtQuintaText ) Then
       ' esegue il codice per la quinta textbox
End If
ciao, hal


"^" significa "elevato a"...

soluzione più generale:
Function has_bits(value As Integer, mask As Integer) As Boolean
    has_bits = ((value And mask) = value)
End Function
-- 
Posted from 
smtp.technorail.com
 [195.103.144.19] (may be forged) 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 End Enum
Cosi se io ho  &H1 + &H2 + &H4 = 7
e passo alla routine di controllo check(somma as integer)
la routine facesse
    if somma and emtPrimaText  = emtPrimaText  then true
    if somma and emtSecondaText  = emtSecondaText  then true
    if somma and emtTerzaText   = emtTerzaText   then true
    if somma and emtQuartaText   = emtQuartaText    then false
    .....
    ....
    etc.
mentre in realtà ottengo a tutte true.
Dove è che sbaglio e che pecco in conoscenza? Si può fare ... io credo di
no.
ciao andrea

    if somma and emtPrimaText  = emtPrimaText  then true
il trucco sta nelle parentesi:
if (somma and emtPrimaText)  = emtPrimaText  then true
ciao, hal