2009-07-03 14 views
4

単純なウィンドウ形式でグループボックス内に線を引くのに問題があります。ここWinformsで線を描く

は私のコードです:

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); 
     } 
    } 

私は、ボタンのクリックイベントにDrawLShapeLine方法を添付した場合、それがうまく描くが、それは、フォームのロード時に描画しません。

アドバイスをしてください。

答えて

3

GroupBoxPaintイベントのイベントハンドラをフックし、そのイベントハンドラ内からDrawLShapeLineを呼び出してください。あなたのコードは、今ではフォームが絵を必要とするときGroupBoxでペイントしようとしたように見えます

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

:あなたはその後、イベント引数内で提供さGraphicsオブジェクトを使用する必要があります。グループボックスは、他の機会にペイントすることができます。ペイントする線は消えます。

0

何か他のことが起こっているかどうかはわかりませんが、Formではなく、GroupBoxのPaintイベントに線を引かなければなりません。汚い

21

クイック&:

どのように1つのピクセルの幅でパネルを作成し、それを背景色を与えるでしょうか?

+0

これは対角線を表していません。 –

+3

GDI +を避けたいと思っています。 –

+1

または固定された単一の境界線を与えます。 – jeromeyers

4

Visual Basic Power Packで使用できるラインコントロールを使用することもできます。

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

あなたは、Visual Studio 2008 SP1、またはVisual Studio 2010を使用している場合は、何かをダウンロードする必要はありません。

ツールボックスにVisual Basic PowerPacksコントロールが表示されない場合は、ツールボックスを右クリックし、コンテキストメニューで[すべて表示]を選択します。

1

テキストなし、3D境界線、高さ2のラベルを追加します(GUIではなく、プロパティページで高さを設定する必要があります)。