2017-01-08 13 views
0

パネルにテーブルを描画するコントロールを作成します。私のコードは:パネルにテーブルを描画するコントロールを作成する方法

public class PanelZ : System.Windows.Forms.Panel 
{ 

    public static void Draw() 
    { 
     Panel p = new Panel(); 
     p.Width = 200; 
     p.Height = 200; 
     Graphics g = p.CreateGraphics(); 
     Pen mypen = new Pen(Brushes.Black, 1); 
     Font myfont = new Font("tahoma", 10); 
     int lines = 9; 
     float x = 0; 
     float y = 0; 
     float xSpace = p.Width/lines; 
     float yspace = p.Height/lines; 
     for (int i = 0; i < lines + 1; i++) 
     { 
      g.DrawLine(mypen, x, y, x, p.Height); 
      x += xSpace; 
     } 
     x = 0f; 
     for (int i = 0; i < lines + 1; i++) 
     { 
      g.DrawLine(mypen, x, y, p.Width, y); 
      y += yspace; 
     } 

    } 

です。しかし、それはテーブルを描きません。だから何をすべきか?

+1

a)表 - グリッドの意味を定義しますか?ラインで? b)CreateGraphicsを取り除き、OnPaintメソッドでペイントします。 – Plutonix

+2

_Graphics g = p.CreateGraphics(); _ほとんど常に間違いです。描画にはOnPaintイベントを使用してください! – TaW

+1

'TableLayoutPanel'や' GridView'や 'ListView'を線で描画できますか? – ja72

答えて

4

これは動作します。しかし、数字は、ペンと同様にプロパティでなければなりません。また、プロパティは大文字で始める必要があります。 VSでの作業で

public class PanelZ : System.Windows.Forms.Panel 
{ 
    public PanelZ()     // a constructor 
    { 
     Width = 200; 
     Height = 200; 
     DoubleBuffered = true; 
     lines = 9; 
    } 

    public int lines { get; set; } // a property 

    protected override void OnPaint(PaintEventArgs e) // the paint event 
    { 
     base.OnPaint(e); 

     Graphics g = e.Graphics; 
     Pen mypen = new Pen(Brushes.Black, 1); 
     Font myfont = new Font("tahoma", 10); 
     float x = 0; 
     float y = 0; 
     float xSpace = Width/lines; 
     float yspace = Height/lines; 
     for (int i = 0; i < lines + 1; i++) 
     { 
      g.DrawLine(mypen, x, y, x, Height); 
      x += xSpace; 
     } 
     for (int i = 0; i < lines + 1; i++) 
     { 
      g.DrawLine(mypen, 0, y, Width, y); 
      y += yspace; 
     } 
    } 
} 

enter image description here

注これだけ色ピクセルという。そこには便利なグリッドはありません。色付きピクセルだけです。実際にあなたが定義したフォントを使用したい場合は、座標と境界ボックスを計算する必要があります。

関連する問題