2016-08-01 3 views
0

Pouvez-vous m'aider avec ce morceau de code? Je veux apprendre à utiliser Invalidate et Update, mais je ne suis pas sûr comment l'utiliser Ce code ne fonctionne pas. Je veux définir un nouveau texte mais il ne "rafraîchit" pas et n'écrit pas la nouvelle chaîne "Prova". MerciC# - Invalidate() et Update()

namespace Invalidate 
{ 
public partial class Form1 : Form 
{ 
    private String txt; 
    private PointF xy; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void panel1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawString("This is the text that prints!", 
     this.Font, System.Drawing.Brushes.Azure, 0, 0); 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     Panel pHText = new Panel(); 
     pHText.Name = "ctrId"; 
     pHText.Location = new Point(10, 10); 
     pHText.Size = new Size(200, 200); 
     pHText.BackColor = Color.White; 
     pHText.Paint += paintingUrCtr; 
     Controls.Add(pHText); 
    } 

    private void paintingUrCtr(object sender, PaintEventArgs e) 
    { 
     Font myFont = new Font("Arial", 14); 
     e.Graphics.DrawLine(new Pen(Color.Black), 0, 0, 10, 10); 
     e.Graphics.DrawString(this.txt, myFont, Brushes.Blue, 10, 10); 
    } 
    public void setText(String text, PointF pos) 
    { 
     this.txt = text; 
     this.xy = pos; 
    } 
    private void button_Click(object sender, EventArgs e) 
    { 
     setText("Prova", new PointF(100, 100)); 
     this.Invalidate(); 
     this.Update(); 
    } 
} 
} 
+0

S'il vous plaît inclure un message d'erreur et l'explication des attendus par rapport à un comportement réel –

+0

HI, ce code ne pas écrire la nouvelle chaîne « Prova » lorsque je clique sur le bouton-poussoir –

+0

Vous invalidant le formulaire, pas le panneau . Réduisez votre formulaire puis restaurez-le pour voir votre texte. – LarsTech

Répondre

0

Appel this.Invalidate(); n'invalide pas les contrôles enfants, vous devez utiliser la surcharge that takes in a bool et passer true

private void button_Click(object sender, EventArgs e) 
{ 
    setText("Prova", new PointF(100, 100)); 
    this.Invalidate(true); 
    this.Update(); 
} 

EDIT: comme mentionné dans les commentaires, vous pouvez aussi simplement invalider le contrôle de l'enfant unique et mettre à jour cela.

private void button_Click(object sender, EventArgs e) 
{ 
    setText("Prova", new PointF(100, 100)); 
    this.Controls["ctrId"].Invalidate(true); 
    this.Controls["ctrId"].Update(); 
} 
+1

J'ai testé votre dernier code et cela fonctionne sans (vrai) –

+0

Merci à LarsTech et Scott Chamberlain –