2014-12-06 70 views
1
  private void panel1_Paint(object sender, PaintEventArgs e) 
    { 
     Pen mypen = default(Pen); 
     mypen = new Pen(System.Drawing.Color.Red, 3); 
     mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 
     //For Dash Line in Rectangle 
     Pen mypen1 = default(Pen); 
     mypen1 = new Pen(System.Drawing.Color.Blue, 1); 
     mypen1.DashStyle![enter image description here][2] = System.Drawing.Drawing2D.DashStyle.Dash; 

     //Pen mypen2 =default(Pen); 
     //mypen2 = new Pen(System.Drawing.Color.Yellow, 3); 
     //mypen2.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 

     //Pen mypen3 = default(Pen); 
     //mypen3 = new Pen(System.Drawing.Color.Violet, 1); 
     //mypen3.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 

     L1 = Rect1LT.X + 5; 
     T1 = Rect1LT.Y + 5; 
     W1 = Rect1RB.X - Rect1LT.X; 
     H1 = Rect1RB.Y - Rect1LT.Y; 


     e.Graphics.DrawRectangle(mypen, new System.Drawing.Rectangle(L1, T1, W1, H1)); 
     e.Graphics.DrawRectangle(mypen1, new System.Drawing.Rectangle(L1, T1, W1, H1)); 

     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1LT.X, Rect1LT.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1RT.X, Rect1RT.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1LB.X, Rect1LB.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1RB.X, Rect1RB.Y, 10, 10)); 

     e.Graphics.FillRectangle(Brushes.Blue, Rect1LT); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1RT); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1LB); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1RB); 

     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1T.X, Rect1T.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1R.X, Rect1R.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1B.X, Rect1B.Y, 10, 10)); 
     e.Graphics.DrawRectangle(Pens.Blue, new System.Drawing.Rectangle(Rect1L.X, Rect1L.Y, 10, 10)); 

     e.Graphics.FillRectangle(Brushes.Blue, Rect1T); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1R); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1B); 
     e.Graphics.FillRectangle(Brushes.Blue, Rect1L); 

     DataGridView dg1 = new DataGridView(); 


     //while (!exit) 
     //{ 
     // var time = GetTime(); 
     // Update(time); 
     // Render(time); 
     //} 


    } 

我想劃分行和列中的矩形和行和列的大小在運行時可以改變嗎?和行數和列數也可以改變?我不想分割整個矩形,我只是想把它們分成矩形。矩形可以分成行和列嗎?

+0

你的代碼是應該做的?變量Rect1T,Rect1B,Rect1L,Rect1R中存儲了哪些類型的值? – 2014-12-06 10:44:41

+0

當然,你可以做到這一點,但你將需要兩個循環,並將需要從您的輸入計算矩形參數。您的代碼似乎只使用4個硬編碼的矩形。 – TaW 2014-12-06 10:54:31

+0

我正在繪製帶有簡單背景的面板上的矩形。我希望矩形在數據網格視圖中被分成幾個像單元格的單元格。 – 2014-12-06 11:06:17

回答

2

這裏是一個簡化的例子:

int cols = 7; int rows = 11; 

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    Rectangle Rect = // your Rectangle! 

    Rectangle pRect = Rect; // panel2.ClientRectangle; 
    float width = 1f * pRect.Width/cols; 
    float height = 1f * pRect.Height/rows; 

    using (Pen pen = new Pen(System.Drawing.Color.Blue, 1)) 
    { 
     pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 

     for (int c = 0; c < cols; c++) 
     for (int r = 0; r < rows; r++) 
     { 
      RectangleF rect = new RectangleF(pRect.X + c * width, pRect.Y + r * height, 
              width, height); 
      e.Graphics.FillRectangle(Brushes.Coral, rect); 
      // e.Graphics.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height); 
     } 

     for (int c = 0; c < cols; c++) e.Graphics.DrawLine(pen, 
      pRect.X + c * width, pRect.Y, pRect.X + c * width, pRect.Y + pRect.Height); 
     for (int r = 0; r < rows; r++) e.Graphics.DrawLine(pen, 
      pRect.X, pRect.Y + r * height, pRect.X + pRect.Width, pRect.Y + r * height); 
     e.Graphics.DrawRectangle(Pens.Red, 
           pRect.X, pRect.Y, pRect.Width - 1, pRect.Height - 1); 

    } 
} 

注意的幾個變化:

  • 邊框顏色和填充顏色一定是不一樣的。
  • 填充必須先到達或覆蓋邊界
  • 我使用浮動來完全填充面板;如果cols和rows不能均勻分成面板/長方形尺寸,那麼recangles將不會全部具有相同的尺寸。
  • 起初,我忽略了您的DashStyle。如果你想有一個DashStyle你必須徹底改變你的計劃!原因是,如果您在網格中繪製矩形,那麼...

    • ..要麼讓它們重疊,然後破折號將相互分開。有一個DashOffset參數,但我不認爲它可以扭曲,使其在任何網格上工作。

    • ..或者您需要在網格單元格內繪製矩形,但它們會是兩倍厚的圖案仍然會互相干擾。

相反,你簡單地畫只有幾行如圖所示!

這是我的例子破折號:

enter image description here

+0

Thnx TaW。但我想在Rectangle中完成這項工作。 – 2014-12-06 11:35:39

+0

你是什麼意思? – TaW 2014-12-06 11:37:06

+0

你爲面板做了這個,但我想把這個工作分解成Rectangle。我想要矩形中的單元格,就像我們在數據網格視圖中一樣。 – 2014-12-06 11:40:59

相關問題