C# Panneau.Refresh() de ne pas appeler méthode de peinture
Je suis en train d'appel panel1 méthode de peinture pour repeindre le panneau avec une ligne orange (il est engagé avec une ligne bleue).
J'ai essayé invalidate(), update() et refresh(), mais rien ne semble appeler l'événement paint de panel1...
La peinture gestionnaire d'événements ont été ajoutés à la panel1:
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
Quelqu'un peut s'il vous plaît aider?
static class Program
{
///<summary>
///The main entry point for the application.
///</summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 testForm = new Form1();
Application.Run(testForm);
testForm.drawNewLine();
}
}
public partial class Form1 : Form
{
bool blueLine = true;
bool orangeLine = false;
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (blueLine == true)
{
Pen bluePen = new Pen(Color.Blue, 3);
g.DrawLine(bluePen, 30, 50, 30, 250);
}
else if (orangeLine == true)
{
Pen orangePen = new Pen(Color.Orange, 3);
g.DrawLine(orangePen, 30, 50, 30, 250);
}
g.Dispose();
}
public void drawNewLine()
{
blueLine = false;
orangeLine = true;
//panel1.Invalidate();
//panel1.Update();
panel1.Refresh();
}
}
OriginalL'auteur williamwallace | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Application.Run(testForm);
blocs jusqu'à ce que le formulaire est fermé, de sorte que lorsquedrawNewLine()
est appelé - forme n'existe plus (créer un bouton qui appelle sur cliquez et vérifiez vous-même, le code de travail).Invalidate()
devrait fonctionner parfaitement.Aussi, vous ne devez pas jeter
Graphics
objet qui est passé à votre code dans l'événement de peinture. Vous n'étiez pas responsable de sa création, afin de laisser le code qui l'a créé pour le détruire.Aussi, disposer
Pen
objets puisque vous êtes en train d'eux.OriginalL'auteur max