Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB6] Selezionare form avendo l'handle


    ho una formMdi contenente N form figlie. Ad un certo evento mi salvo l'handle della form figlia selezionata e faccio fare al programma altre operazioni che fanno perdere il focus a questa form. Ad un altro evento devo poter ridare il focus alla form figlia selezionata in precedenza. Come posso fare avendo l'handle salvato in una variabile?

  2. #2
    Tu intendi metterla in primo piano?

    Con le API riesci benissimo tramite l'handle a fare tutto... spiega un pò meglio
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    Originariamente inviato da Emulator ®
    Tu intendi metterla in primo piano?

    Con le API riesci benissimo tramite l'handle a fare tutto... spiega un pò meglio
    + o -
    La formMdi contiene diverse form figlia create dinamicamente. Cliccando su un button di una figlia, il controllo passa ad un'altra form (che non ha niente a che vedere con la Mdi). Con questa form aperta devo poter colorare il button della form figlia che avevo premuto in precedenza. Il problema è che quella form non ha + il controllo e non so come fare riferimento ad essa. Sul click del button mi sono salvato l'handle della form (sembra l'unica proprietà univoca per poterla distinguere dalle altre), ma non so come utilizzarla in questo caso.
    In poche parole, anziche dire "NomeForm.Button.BackColor...." devo poter dire "FormConHandleXXXXX -> button.BackColor".
    L'unica cosa che son riuscito a fare è ritrovare la form con un ciclo del tipo
    codice:
      For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          'Qui che faccio? Anche trovando la form non riesco + a far riferimento al tasto...
        EndIf
      Next
    Una soluzione potrebbe essere quella di inserire un timer nella form figlia. Quando clicco sul tasto faccio partire il timer. Se all'evento Timer trovo una variabile impostata a true (questa variabile la imposto a true quando ho intenzione di colorare il tasto), allora blocco il timer e passo il focus al tasto (posso facilmente visto che il timer è nella stessa form).
    Esiste una soluzione + semplice?

  4. #4
    Fai riferimento alla proprietà Controls di VarForm:
    codice:
    For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          VarForm.Controls("NomePulsante").BackColor = &HFFFFFF 'O il colore che preferisci.
        EndIf
      Next
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Originariamente inviato da MItaly
    Fai riferimento alla proprietà Controls di VarForm:
    codice:
    For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          VarForm.Controls("NomePulsante").BackColor = &HFFFFFF 'O il colore che preferisci.
        EndIf
      Next
    Il tasto ha l'indice, è una serie di tasti

  6. #6
    Finalemente!
    codice:
     For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          For Each VarControl in VarForm.Controls
            If VarControl.Name = "TastoTurno" Then
              If VarControl.Index = IndiceDelTastoPremuto Then
                VarControl.BackColor = VbRed
              EndIf
            EndIf
          Next
        EndIf
      Next
    Quindi oltre a memorizzare l'handle della form memorizzo anche l'indice del tasto premuto
    Grazie a tutti per l'aiuto!

  7. #7
    Originariamente inviato da Luciano79
    codice:
     For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          For Each VarControl in VarForm.Controls
            If VarControl.Name = "TastoTurno" Then
              If VarControl.Index = IndiceDelTastoPremuto Then
                VarControl.BackColor = VbRed
              EndIf
            EndIf
          Next
        EndIf
      Next
    Ci sono un mucchio di cicli inutili: si può eliminare il più interno in questa maniera:
    codice:
    Dim VarForm As Form
     For Each VarForm in Forms
        If VarForm.Hdc = HandleMemorizzato Then
          VarForm.Controls("TastoTurno")(IndiceDelTastoPremuto).BackColor=vbRed
        EndIf
      Next
    Ma si può fare di meglio: in questo spezzone di codice si suppone che tu abbia memorizzato l'handle del form da qualche parte; perché non sostituire ad "HandleMemorizzato" una variabile di tipo MiaFormFiglia (o come si chiama la tua form figlia) che contenga un riferimento ad essa?
    codice:
    'In un qualche modulo
    Public ff As MiaFormFiglia
    
    'Nel punto in cui salveresti l'handle
    ff=Me '(supponendo che ci troviamo nel modulo della form in questione)
    
    'Nell'evento in questione:
    ff.TastoTurno(IndiceDelTastoPremuto).BackColor=vbRed
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Originariamente inviato da MItaly
    codice:
    'In un qualche modulo
    Public ff As MiaFormFiglia
    
    'Nel punto in cui salveresti l'handle
    ff=Me '(supponendo che ci troviamo nel modulo della form in questione)
    
    'Nell'evento in questione:
    ff.TastoTurno(IndiceDelTastoPremuto).BackColor=vbRed
    Perfetto!

  9. #9
    Lieto di esserti stato utile.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.