Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    327

    [VB6] Riferimenti a tutti i controlli sul form

    Da tempo mi pongo un quesito....

    ...ho una Form con delle TextBox dove mi sposto tra una textbox e l'altra con il tasto invio....questo è il codice:

    in un modulo inserisco:

    <code>----------------------------------------------------

    Public Const VK_TAB = &H9

    Public Declare Sub keybd_event Lib "user32" _
    (ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)

    <\code>----------------------------------------------------

    ...nell'evento KeyPress della TextBox inserisco:

    <code>----------------------------------------------------

    If KeyAscii = vbKeyReturn Then
    KeyAscii = 0 'elimina il beep
    keybd_event VK_TAB, 0, 0, 0 'riproduce il TAB
    End If
    KeyAscii = Asc(UCase(Chr(KeyAscii)))

    <\code>----------------------------------------------------

    ...con l'ultima riga del codice scrivo maiuscolo.

    Fin quì tutto a posto...ma il problema si presenta quando su di una Form ho parecchie TextBox...infatti devo riscrivere il codice per tutti i controlli ad uno a uno.

    Quindi c'è un modo con il quale possa sfruttare quel codice una sola volta e che valga per tutte le textBox presenti sul Form?

    Grazie se vorrete aiutarmi.
    Errare è umano, Perseverare è Diabolico.
    sapiente è colui ke sa di non sapere.

  2. #2
    Si potrebbe fare in VB.NET in maniera semplice ed elegante, sia con gli AddHandler sia con una procedura di evento con clausola Handles che gestisca più eventi, ma in VB6 sei costretto ad usare una matrice di controlli.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    327
    Grazie per il tuo interessamento MItaly....
    ....Ho incontrato lo stesso problema con la cancellazione di tutte le textbox presenti sulla form...ed ho risolto in questo modo:

    <code>------------------------------------------------

    Dim c As Control

    For Each c In Me.Controls
    If TypeOf c Is TextBox Then
    c.Text = ""
    End If
    Next

    <\code>------------------------------------------------

    ...non si potrebbe adattare questo codice in qualche maniera
    Errare è umano, Perseverare è Diabolico.
    sapiente è colui ke sa di non sapere.

  4. #4
    Puoi usare quest'approccio per accedere alle proprietà di tutti i controlli, ma non per gestirne gli eventi. Al limite puoi mettere un timer che ogni x secondi cicli su tutte le textbox e faccia quello che vuoi fare; forse si può anche fare con il subclassing, ma è una faccenda piuttosto complessa.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    327
    Ma guarda un po... ...dopo vari tentativi ho risolto così:

    Lo stesso codice di cui sopra lo inserisco nell'evento KeyPress della form dove sono presenti i controlli textbox...e imposto la propietà KeyPreview del Form sul valore TRUE.

    Funziona...Tanks!
    Errare è umano, Perseverare è Diabolico.
    sapiente è colui ke sa di non sapere.

  6. #6
    Originariamente inviato da p73
    Grazie per il tuo interessamento MItaly....
    ....Ho incontrato lo stesso problema con la cancellazione di tutte le textbox presenti sulla form...ed ho risolto in questo modo:

    <code>------------------------------------------------

    Dim c As Control

    For Each c In Me.Controls
    If TypeOf c Is TextBox Then
    c.Text = ""
    End If
    Next

    <\code>------------------------------------------------

    ...non si potrebbe adattare questo codice in qualche maniera
    premesso che la soluzione migliore è senz'altro l'arrray di controlli,
    puoi provare ad abilitare il KeyPreview del Form
    e nel suo evento KeyPress scrivere

    codice:
    Private Sub Form_KeyPress(KeyAscii As Integer)
    
    If (KeyAscii = vbKeyReturn) And (TypeOf Me.ActiveControl Is TextBox) Then
        'KeyAscii = vbKeyTab
        KeyAscii = 0 'elimina il beep
        keybd_event VK_TAB, 0, 0, 0 'riproduce il TAB
    End If
    
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
    
    end sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.