Creare forme e linee grafiche ... e cancellarle.

di il
12 risposte

Creare forme e linee grafiche ... e cancellarle.

Buonasera a tutti,
con questo codice, creo una cornice intorno ad una textbox quando l'utente la "salta".

Private Sub DrawRectangle()
        Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red, 6)
        Dim formGraphics As System.Drawing.Graphics
        formGraphics = Me.CreateGraphics()
        formGraphics.DrawRectangle(myPen, New Rectangle(277, 116, 216, 31))
        myPen.Dispose()
        formGraphics.Dispose()
    End Sub
Una volta che l'utente comincia a scrivere all'interno della text, la cornice dovrebbe sparire.
Qualcuno saprebbe darmi qualche consiglio su come nasconderla?
Grazie.

ps Il bordo di una textbox non può essere colorato, vero?

12 Risposte

  • Re: Creare forme e linee grafiche ... e cancellarle.

    Dipende da qual è l'evento in cui disegni il rettangolo chiamando la Sub DrawRectangle. Se, come è probabile, la chiami nell'evento Paint, allora basta che:
    1) dichiari una variabile booleana a livello di form, impostata a false
    2) quando la TextBox perde il focus (ev. Leave) imposti la variabile booleana a True ed esegui un Refresh del form
    3) nell'evento Paint esegui la DrawRectangle solo se la booleana è false.

    Ma nel form c'è solo una TextBox?
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Grazie grumpy ... praticamente nel form ci sono 2 textbox, una combobox, un datatimepicker e 2 radiobutton.
    L'utente deve riempirle tutte (o selezionarle), se una è lasciata vuota, il rispettivo bordo doveva cambiare colore ma ho scoperto che non è possibile cambiare colore ai bordi e allora ho trovato in giro il metodo di disegnare una cornice colorata.
    Quando l'utente clicca il pulsante INVIA, il programma controlla se quei controlli sono vuoti o se hanno cambiato stato; quindi clicco il pulsante, controllo le condizioni, se vuoti disegno la cornice, e setto il focus sul primo controllo vuoto; al primo carattere scritto in quella textbox (o altro) la cornice dovrebbe scomparire.
    Dal pulsante alla sub.
    Come effettuo il refresh del form?
    Grazie e a presto.
  • Re: Creare forme e linee grafiche ... e cancellarle.

    joker7421 ha scritto:


    Come effettuo il refresh del form?
    Con il metodo Refresh, ovviamente.
  • Re: Creare forme e linee grafiche ... e cancellarle.

    joker7421 ha scritto:


    Qualcuno saprebbe darmi qualche consiglio su come nasconderla?
    In realtà, per nasconderla basterebbe coprire quella parte di Form con un altra finestra o applicazione, e il disegno scompare subito: questo perché il rettangolo che vai a tracciare non è persistente, ma è disegnato nel contesto grafico della finestra che, a fronte della necessità di aggiornarsi, andrà a ridisegnare sé stessa evitando (per ovvi motivi) di riportare anche il tuo disegno, che potremmo considerare "transiente".

    Teoricamente quindi, ti basta una chiamata a .

    Ciao!
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Ciao scusa, ma invece di fare tutta questa cosa, se usi il backcolor del controllo della Textbox? cioè quando premi il pulsante vai a controllare che sia scritta e se non lo è si colora tutta di rosso così salta prima all'occhio no? poi magari nell'evento textchange metti il codice per riportarla del colore originale...
  • Re: Creare forme e linee grafiche ... e cancellarle.

    orione1976 ha scritto:


    Ciao scusa, ma invece di fare tutta questa cosa, se usi il backcolor del controllo della Textbox? cioè quando premi il pulsante vai a controllare che sia scritta e se non lo è si colora tutta di rosso così salta prima all'occhio no? poi magari nell'evento textchange metti il codice per riportarla del colore originale...
    Grazie Orione, effettivamente è la cosa più facile da fare ed ottiene lo stesso effetto.
    L'unico problema ce l'ho con il controllo Datetimepicker che non ha la funzione Backcolor: qualcuno ha qualche suggerimento per aggirare questa limitazione?

    grumpy ha scritto:


    Con il metodo Refresh, ovviamente.
    Grazie, effettivamente è una stupidaggine ma non lo trovavo da nessuna parte. Non l'ho mai usato.
    Ora faccio il punto della situazione, vantaggi di un metodo e dell'altro ... spero di trovarvi sempre disponibili per un aiuto.
    Grazie e a presto
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Per il DateTimePicker hai 2 soluzioni se non riesci a colorarlo, se lo usi per riempire una textbox, allora lasci quest'ultima sempre evidenziata come NON SCRITTA e la metti di defoult dopo la pressione del DateTimePicker... oppure potresti impostare un valore come Boolean = False e se premi il DateTimePicker diventa True, in quel caso una volta avviato il tuo Bottone funzione, fai un controllo di questo valore...
  • Re: Creare forme e linee grafiche ... e cancellarle.

    AGGIORNAMENTO
    Buongiorno a tutti ... alla fine ho risolto ancora più "ignorantemente".
    Ho inserito una PictureBox caricata con un file immagine contenente una cornice rossa creata con un software di grafica; ho impostata il colore di fondo trasparente e, ogni volta che mi serve, la faccio comparire.
    Grazie e a presto.
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Non mi sembra una gran soluzione. Come fai se i controlli da evidenziare hanno dimensioni diverse?
  • Re: Creare forme e linee grafiche ... e cancellarle.

    La fortuna è che hanno tutti le stesse misure, già prima che pensassi a questa cornice.
    Sicuramente non è elegantissima ma ti assicuro che è molto funzionale.
    I controlli contenuti nel form hanno le stesse dimensioni e sono posizionati ad intervalli ben precisi; quindi basta una sola picturebox che poi posiziono via codice e l'attivo con il .visible.
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Disponi una variabile di tipo Rectangle a livello globale.

    Aggiungi un Handler a tutti i controlli della form che ne gestisca il focus in apposita funzione e lavori lazy-association sul sender per ottenerne il ClientRectangle e modificarne le dimensioni quel tanto che basta affinché non sia disegnato sotto il controllo selezionato.

    Quando il controllo prende il focus inizializzi il rettangolo globale ed esegui il Refresh della form.
  • Re: Creare forme e linee grafiche ... e cancellarle.

    Ti ringrazio Dev ma già le tue sono parole molto più difficili per me.
Devi accedere o registrarti per scrivere nel forum
12 risposte