Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    GotFocus per tutti i campi di una form

    Salve ragazzi, ciao moderatori,

    ho fatto una piccola ricerca nel forum ma non sono riuscito a trovare nulla.
    Il mio problema è questo:

    Ho una form con dei campi, cioè dei TexBox.
    Vorrei gestire il GoFocus è lo faccio per ognuno di essi con la routine:

    ------------------------
    Private Sub txtCliente_GotFocus() ' entra nel campo
    txtCliente.SelStart = 0
    txtCliente.SelLength = 65535
    End Sub
    --------------------

    dove txtCliente è il nome del campo.
    Inserisco questa routine per ognuno dei campi della form.
    Vi chiedo un piccolo aiuto per sapere se è possibile gestire l'evento GotFocus con un'unica routine per tutti i TextBox presenti sulla form.
    Io ho provato così

    ---------------------
    Public Sub EvidenziaControl(frm As Form)
    Dim txt As textbox
    For Each txt In frm.Controls
    If txt_GotFocus() Then
    txt.SelStart = 0
    txt.SelLength = 65535
    End If
    Next ctr
    --------------------
    Richiamando questa routine all'interno di una Timer come di seguito (impostato a 1 l'intervallo di tempo):

    ----------------------------
    Private Sub Timer1_Timer()
    Call EvidenziaControl(frmMIO)
    End Sub
    ----------------------------


    ma non funziona !



    Grazie anticipate per l'aiuto

  2. #2
    non ho capito a cosa può servirti l'istruzione ...

    in ogni caso puoi scegliere di
    chiamare la funzione all'evento gotfocus di tutte le text
    o puoi creare un arrya di textbox
    prude il dito, lui sdraiato
    ha giocato a guardie e ladri col ladro sbagliato

  3. #3
    eila...ciao gudfella
    piacere di conoscerti.

    allora: non ho un array di textbox,
    ogni textbox ha un nome univoco.

    Supponi di avere 10 textbox sulla form
    bisogna gestire ogni evento GotFocus di ognuno ?
    Si può scandire in un colpo solo tutti gli eventi dei textbox ? se si, non so come fare!

  4. #4
    Originariamente inviato da Paco.Baldacci
    Si può scandire in un colpo solo tutti gli eventi dei textbox ? se si, non so come fare!
    No !

    La soluzione che hai prospettato tu (l'uso del Timer) il linea di massima e' corretta, ricordo che viene riportata anche su "VB6 - Tips & Tricks" di F. Balena (un mito!), che pero' non ho sottomano in questo momento...

    Tieni conto anche che....
    1) in che senso "non funziona" ? (msg. d'errore, linea su cui si verifica...)
    2) interval = 1 mi sembra eccessivo !
    3) il loop "For Each..." che hai riportato non mi convince, potresti provare:
    Dim c As Control
    For Each c In frm.Controls
    ... poi qualcosa come.....
    If c Is ActiveControl() Then....


    Appena posso ti postero' qualcosa di piu' preciso.... Ciao !
    IceCube_HT (VB6 fan Club)

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Paco.Baldacci
    Salve ragazzi, ciao moderatori,
    Ricambio il saluto, ma ti chiedo di indicare anche il linguaggio e la versione nel titolo, come da Regolamento...

    Di che si parla?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Ecco la versione corretta, tratta appunto dal libro di F.Balena "I trucchi di Visual Basic 6":

    codice:
    Private Sub Timer1_Timer()
       Static c As Control
       On Error Resume Next
       If Not (c Is ActiveControl) Then
          Set c = ActiveControl
          c.SelStart = 0
          c.SelLength = Len(c.Text)
       End If
    End Sub
    La routine funziona perfettamente (anche se la logica non e' proprio immediata !), ed un valore opportuno di Timer1.Interval e' 100.

    Spero faccia al caso tuo, ciao !!!!
    IceCube_HT (VB6 fan Club)

  7. #7
    ciao alka...
    scusate...miscordo sempre sto regolamento...nel senso ke è un bel po' che non entro !!!
    eheheh

    si parla di VB6

    grazie Icecube stasera la provo subito...
    ma grazie anke agli altri ovviamente !!

  8. #8
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    ho trovato anche una soluzione senza l'utilizzo di un Timer:

    codice:
    Dim WithEvents ActCtrl As TextBox
    Dim OldCtrl As TextBox
    
    Private Sub ActCtrl_GotFocus()
    ActCtrl.BackColor = vbRed
    End Sub
    
    Private Sub ActCtrl_LostFocus()
    Set OldCtrl = ActCtrl
    OldCtrl.BackColor = vbWhite
    Set ActCtrl = Me.ActiveControl
    End Sub
    
    Private Sub Form_Load()
    Set ActCtrl = Text1
    End Sub
    nel codice ho fatto in modo che il textbox con il focus sia colorato di rosso.

    Boolean

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    14
    Salve a tutti.
    Sto imparando e mi riferisco al codice scritto da Boolean e chiedo come modificarlo per fare in modo che il cursore, come pure la selezione in rosso, si posizionino alla fine del testo?
    Grazie per la risposta.

  10. #10
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    codice:
    Private Sub ActCtrl_GotFocus()
    ActCtrl.BackColor = vbRed
    ActCtrl.SelStart = Len(ActCtrl.Text)
    End Sub
    Boolean

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.