2016-08-01 34 views
0

Können Sie mir mit diesem Code helfen? Ich möchte lernen, Invalidate und Update zu verwenden, aber ich bin mir nicht sicher, wie man es benutzt Dieser Code funktioniert nicht. Ich möchte neuen Text setzen, aber es "aktualisiert" nicht und schreibt nicht die neue Zeichenkette "Prova". DankC# - Invalidate() und 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

Bitte geben Sie eine Fehlermeldung und Erläuterung der HALLO-Ist-Verhalten –

+0

erwartet, wird dieser Code nicht die neue Zeichenfolge „Prova“ schreiben, wenn ich auf Druckknopf klicken –

+0

Sie das Formular sind ungültig zu machen, nicht das Panel . Minimiere dein Formular und stelle es wieder her, um deinen Text zu sehen. – LarsTech

Antwort

0

this.Invalidate(); Aufruf nicht ungültig Kind steuert, müssen Sie die Überlastung that takes in a bool und in true

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

EDIT passieren verwenden: wie in den Kommentaren erwähnt, könnten Sie auch entkräften nur das einzelne Kind steuert und aktualisiert das.

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

Ich habe Ihren letzten Code getestet und es funktioniert ohne (wahr) –

+0

Dank LarsTech und Scott Chamberlain –