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

    [C# ]Problema su OnPaint

    Ciao ragazzi.... ho un piccolo problema nel Metodo OnPaint di una form.... magari se neccessario posto il codice, in pratica quando l'utente clicca su Button, io creo un oggetto Graphics da un'immagine e poi la disegno nel metodo Onpaint, il problema è che cliccando sul Button non accade nulla, ma se riduco a icona la Form e poi la ingrandisco, l'immagine c'è....

  2. #2
    Non si è capito molto... posta il codice e quello che vuoi fare.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Allora ho creato questa classe:

    public class DraggableImage
    {
    public Bitmap img;
    public Point Location;
    public int Width;
    public int Height;


    public DraggableImage(Bitmap bmp, Point loc)
    {
    this.img = bmp;
    this.Height = bmp.Height;
    this.Width = bmp.Width;
    this.Location = loc;
    }

    public void Draw(System.Drawing.Graphics g)
    {
    g.DrawImage(this.img, this.Location);
    }
    }


    poi nella mia form ho un Button (Button1) al click deve disegnarmi l'immagine nella Form, questa è il codice della Form:

    public partial class Form1 : Form
    {

    List<DraggableImage> lista = new List<DraggableImage>();

    public Form1()
    {
    InitializeComponent();

    }

    protected override void OnPaint(PaintEventArgs e)
    {
    base.OnPaint(e);

    foreach (DraggableImage i in lista)
    {
    i.Draw(e.Graphics);
    }

    }

    private void button1_Click(object sender, EventArgs e)
    {

    // test con una sola immagine
    DraggableImage a = new DraggableImage(new Bitmap("C:\\test.gif"),new Point(50,50));
    lista.Add(a);

    }

    }

    ora... il problema è che se clicco il Button non accade nulla, ma se riduco a icona e poi ripristino la form, l'immagine è correttamente presente....

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

    Re: [C# ]Problema su OnPaint

    Originariamente inviato da artistic101
    Ciao ragazzi.... ho un piccolo problema nel Metodo OnPaint di una form.... magari se neccessario posto il codice, in pratica quando l'utente clicca su Button, io creo un oggetto Graphics da un'immagine e poi la disegno nel metodo Onpaint, il problema è che cliccando sul Button non accade nulla, ma se riduco a icona la Form e poi la ingrandisco, l'immagine c'è....
    Mancherà probabilmente una chiamata a Invalidate per segnalare al controllo che il suo aspetto grafico deve essere ridisegnato. :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5

    Re: Re: [C# ]Problema su OnPaint

    Originariamente inviato da alka
    Mancherà probabilmente una chiamata a Invalidate per segnalare al controllo che il suo aspetto grafico deve essere ridisegnato. :master:
    Grazie mille... Era proprio questo il problema...
    Un'ultima cosa, dove è più corretto eseguire la chiamata a Invalidate()?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ogni volta ti serve ridisegnare il controllo.

  7. #7
    Grazie mille, ora vorrei poter fare un ultima cosa... Invece di disegnare sulla Form vorrei disegnare su un controllo (ad esempio un Panel o un PictureBox) che funga da "area di lavoro", come faccio a "dirgli" che deve disegnare su questo e non sulla Form...?
    Grazie per la pazienza ragazzi...

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

    Re: Re: Re: [C# ]Problema su OnPaint

    Originariamente inviato da artistic101
    Un'ultima cosa, dove è più corretto eseguire la chiamata a Invalidate()?
    Devi invocare Invalidate ogni volta che modifichi un campo (in seguito all'invocazione di un metodo o alla modifica di una proprietà) che comporta una alterazione di ciò che è visualizzato sullo schermo; la chiamata indica a Windows di ridisegnare il controllo appena possibile, e più chiamate consecutive non comportano problemi (Windows viene solo notificato della necessità di disegnare il controllo, ma ciò avverrà "una tantum" in seguito).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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.