2009-07-03 7 views
4

Ich habe Probleme beim Zeichnen einer Linie in einem Gruppenfeld in einem einfachen Windows-Formular.Zeichnen einer Linie in Winforms

hier ist mein Code:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent();       
     } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
      base.OnPaint(e);    
      DrawLShapeLine(groupBox1.CreateGraphics(), 10, 10, 20, 40); 
     } 

     public void DrawLShapeLine(System.Drawing.Graphics g, int intMarginLeft, int intMarginTop, int intWidth, int intHeight) 
     { 
      Pen myPen = new Pen(Color.Black); 
      myPen.Width = 2; 
      // Create array of points that define lines to draw. 
      int marginleft = intMarginLeft; 
      int marginTop = intMarginTop; 
      int width = intWidth; 
      int height = intHeight; 
      int arrowSize = 3; 
      Point[] points = 
      { 
       new Point(marginleft, marginTop), 
       new Point(marginleft, height + marginTop), 
       new Point(marginleft + width, marginTop + height), 
       // Arrow 
       new Point(marginleft + width - arrowSize, marginTop + height - arrowSize), 
       new Point(marginleft + width - arrowSize, marginTop + height + arrowSize), 
       new Point(marginleft + width, marginTop + height) 
      }; 

      g.DrawLines(myPen, points); 
     } 
    } 

Wenn ich die DrawLShapeLine Methode auf eine Schaltfläche klicken Ereignis zuordnen, zieht es in Ordnung, aber es zieht nicht auf Last des Formulars.

Bitte um Rat.

Antwort

3

Schließen Sie einen Event-Handler für das Paint-Ereignis der GroupBox an und rufen Sie DrawLShapeLine stattdessen in diesem Event-Handler auf. Sie sollten dann das Graphics-Objekt verwenden, in Ereignisargumenten geliefert von:

private void groupBox1_Paint(object sender, PaintEventArgs e) 
{ 
    DrawLShapeLine(e.Graphics, 10, 10, 20, 40); 
} 

Als Ihr Code jetzt sieht es in den GroupBox zu malen versucht, wenn das Formular Malerei erfordert. Die Gruppenbox kann zu jeder anderen Gelegenheit gemalt werden, damit die Linie, die Sie malen, verschwindet.

0

Ich bin mir nicht sicher, ob etwas anderes passiert, aber Sie sollten die Linie auf dem Paint-Ereignis GroupBox zeichnen, nicht die Form 's.

21

Schnell & schmutzig:

Wie über ein Panel mit einer Breite von 1 Pixel erstellen und eine Hintergrundfarbe geben?

+0

Dies tut nicht diagonale Linien tho. –

+3

Guter Tipp, wenn Sie keine diagonalen Linien * wollen und GDI + vermeiden möchten. –

+1

Oder geben Sie eine feste einzelne Grenze. – jeromeyers

4

Eine weitere Option wäre die Verwendung des in Visual Basic Power Packs verfügbaren Leitungssteuerelements.

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d9e082c8-5386-4481-a744-1c9029805696/

Wenn Sie Visual Studio 2008 SP1 oder Visual Studio 2010, werden Sie nichts herunterladen.

Wenn das Steuerelement Visual Basic PowerPacks nicht in der Toolbox angezeigt wird, klicken Sie mit der rechten Maustaste in die Toolbox, und wählen Sie im Kontextmenü den Befehl Alle anzeigen.

1

Fügen Sie eine Beschriftung ohne Text, einen 3D-Rahmen und eine Höhe von 2 hinzu (Sie müssen die Höhe auf der Eigenschaftenseite einstellen, nicht mit der GUI)!