Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    5

    [VB2010 WinForms] Flickering & Click

    Ciao a tutti,

    sono un nuovo iscritto del forum, autodidatta VB6 passato ora per necessità a VB.NET 2010.
    Non essendoci (ovviamente) convertitori che possano essere definiti tali, per trasferire i miei progetti da un VB all'altro, ho riscritto tutto il mio programma approfittando anche per un bel restyling della base dati
    Sono a buon punto ma mi trovo davanti un paio di problemini che spero siano banali...per la comunità

    - Ho un leggero problema di flickering al momento della visualizzazione con delle form MDI. Ho già impostato la proprietà DoubleBuffered=True ed ho notato un miglioramento, ma non definitivo. Da notare che tali form sono con misure fisse (H&W) ed ho provato ad impostarle sia CenterParent che Manual. L'unica operazione che faccio è un setlocation(0,0) nell'evento show.

    - Il secondo ostacolo riguarda l'esecuzione di una routine nel form B attivata dal form A. in VB6 riuscivo a gestire le operazioni mantenendo la form nascosta e a visualizzarla successivamente con i risultati pronti oppure scaricarla. Ora non riesco a fare ciò perchè PerformClick non produce l'effetto richiesto se non visualizzo la form con .show!!! Pertanto mi ritrovo ad avere un nuovo effetti flickering stavolta causato da me! Esistono metodi migliori per affrontare il problema?


    Grazie per l'attenzione e scusate se mi sono dilungato ma ho cercato di essere il più chiaro possibile.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    5
    Caspita...a giudicare dalla proporzione tra visualizzazioni e risposte mi sa che dovrò ricredermi sulla banalità del problema!

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da IvanMB
    Caspita...a giudicare dalla proporzione tra visualizzazioni e risposte mi sa che dovrò ricredermi sulla banalità del problema!
    Magari è il contrario , nel senso che può essere così banale che nessuno ci perde tempo a spiegarti cose che potresti risolvere documentandoti su internet...
    Comunque, per il flickering che citi ho poche idee e confuse di che cosa si tratta , sono abbastanza autodidatta ed ignorante (faccio qualche programmino per hobby) però se intendi la "lentezza" nella creazione/visualizzazione del form e dei controlli penso dipenda dalle prestazioni del pc, sul portatile dove programmo i miei programmi sono "agilissimi" mentre sul pc a cui sono destinati (W2000, P3, 512MB) "arrancano". Di più non so.
    Mentre per il discorso "secondo ostacolo" puoi semplicemente spostare il codice del Form B in una Classe. Visto che i Form MDI non li conoscevo ho provato a scrivere qualche riga per capire meglio di cosa si tratta, sono:
    1 form padre
    1 form con due numericupdown e un button
    1 form con un numericupdown e un button
    1 classe
    Per il resto penso sia molto immediato capire cosa fa...vedi tu se ti può servire come ispirazione:
    codice:
    Public Class MDIParent1
        Private Sub MDIParent1_Load() Handles MyBase.Load
            Form1.MdiParent = Me
            Form2.MdiParent = Me
            Form1.Show()
        End Sub
    End Class
    codice:
    Public Class Form1
        Private Sub Button1_Click() Handles Button1.Click
            Class1.calcola()
            Form2.Show()
        End Sub
    End Class
    codice:
    Public Class Form2
        Private Sub Button1_Click() Handles Button1.Click
            Class1.calcola()
        End Sub
    End Class
    codice:
    Public Class Class1
        Shared Sub calcola()
            Form2.NumericUpDown1.Value = Form1.NumericUpDown1.Value + Form1.NumericUpDown2.Value
        End Sub
    End Class

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    5
    --------
    Magari è il contrario , nel senso che può essere così banale che nessuno ci perde tempo a spiegarti cose che potresti risolvere documentandoti su internet...
    Comunque, per il flickering che citi ho poche idee e confuse di che cosa si tratta
    --------

    Senz'offesa...ma il consiglio è reciproco...il flickering non è affatto ciò di cui parli, ma un conosciuto "effetto lampeggio" di una form....

    Cmq per carità...tutto è possibile, ma un forum è tale proprio per queste cose. Ci sono quesiti in giro (non solo qui) a cui anche mia sorella di 7 anni avrebbe la soluzione e ai quali in tanti me compreso non si sottraggono a rispondere seppur banali. E' un modo come un altro per imparare.

    Per quanto riguarda la soluzione da te proposta al 2° quesito, non credo sia la strada giusta, o almeno spero ce ne sia una migliore.
    Provo a spiegarmi meglio : Sulla form B (mdiFiglio) ho un pulsante che esegue n controlli su checkbox e/o textbox su tale form e poi esegue operazioni su delle tabelle presenti in essa.
    Quello di cui ho bisogno io è dalla form A (mdiPadre) "simulare" la pressione di quel pulsante in modo tale che venga fatto tutto ciò e poi visualizzare la form B con tutto pronto.
    Ora, la soluzione a tutto ciò è PerformClick, ma il problema davanti al quale mi trovo io è che tutto ciò non avviene senza che io sia costretto a visualizzare la form B con .Show e quindi avere a vista tutte le operazioni con relativi "lampeggi" di griglie e rallentamenti vari.

    Detto ciò suppongo, che sbagli in qualche riferimento tra public o no oppure che ci sia qualche altro metodo che non conosco. Applicare ciò che tu mi suggerisci implica dover riportare tutto il codice in una class esterna e riscriverlo con tutti i riferimenti ai controlli delle varie form, il che non sarebbe difficoltoso se rapportato alle 2 righe del tuo esempio, ma il discorso cambia se parliamo di un progetto di una certa sostanza.

    Questo è quanto...

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Nessuna offesa, anzi scusami per il commento.
    Per il flickering ho ancora le idee confuse...continuo a pensare che sia un problema di "ridisegno/aggiornamento" della form...però ripeto che sono molto ignorante...
    Per il secondo punto e per le mie conoscenze io avevo spostato su diverse classi il codice di una form che aveva circa 5000 righe e 150 controlli (un' obbrobrio causato dalla mia ignoranza) con "copia/incolla" e poi seguendo gli errori ho corretto con "trova e sostituisci", non so il tuo progetto ma per me era "tanto"...
    Comunque, da quel che ho potuto capire, il PerformClick del tuo caso non funziona perchè fai riferimento ad un' oggetto che non è ancora stato creato, quindi dovresti fare avviare direttamente una routine piuttosto che un' evento.
    Puoi provare decommentando di volta in volta il codice sotto (caso 1, ecc.):
    codice:
    Public Class MDIParent1
        Private Sub Button1_Click() Handles Button1.Click
            Form1.MdiParent = Me
    
            '' caso 1 funzionante
            'Form1.leggi_valori()
            'Form1.calcoli()
    
            '' caso 2 funzionante
            'Form1.Button1_Click()
    
            '' caso 3 NON funzionante
            'Form1.Button1.PerformClick()
    
            Form1.Show()
        End Sub
    End Class
    codice:
    Public Class Form1
        Public Sub leggi_valori()
            NumericUpDown1.Value = 3
            NumericUpDown2.Value = 7
        End Sub
    
        Public Sub calcoli()
            TextBox1.Text = CStr(NumericUpDown1.Value + NumericUpDown2.Value)
        End Sub
    
        Public Sub Button1_Click() Handles Button1.Click
            leggi_valori()
            calcoli()
        End Sub
    End Class
    Quindi, secondo me, in un modo o nell' altro devi modificare parte del codice.
    Molto probabilmente c' è un modo per fare quello che vuoi che ignoro e spero che qualcuno lo posti, imparare cose nuove fa sempre bene

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.