2014-12-06 1 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); 
     //} 


    } 

Я хочу разделить прямоугольник в строках и столбцах, а размер строк и столбцов может быть изменен во время выполнения? и No of Rows and Columns также могут быть изменены? Я не хочу разбивать целый прямоугольник, я просто хочу разделить их на прямоугольник.Может ли прямоугольник разбиваться на строки и столбцы?

+0

Что ваш код должен делать? Какие значения хранятся в переменных Rect1T, Rect1B, Rect1L, Rect1R? –

+0

Конечно, вы можете это сделать, но вам понадобятся две петли, и вам нужно будет вычислить прямоугольные пармы с вашего ввода. В вашем коде, похоже, используются только 4 жестко закодированных прямоугольника. – TaW

+0

Я рисую прямоугольник на панели с Простым фоном. Я хочу, чтобы Rectangle был разделен на несколько ячеек, таких как ячейки в представлении сетки данных. –

ответ

2

Вот simplfied пример:

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 и ряды не делятся на размер панели/прямоугольника равномерно, то перегруппировки не будут иметь одинаковые размеры.
  • Сначала я проигнорировал ваш DashStyle. Если вы хотите иметь DashStyle, вы должны полностью изменить свой план! Причина заключается в том, что если вы рисуете прямоугольники в сетке вас ..

    • ..either имеет их перекрытие, а затем тир получит в друг друга способом. Есть параметр DashOffset, но я не думаю, что его можно скрутить, чтобы он работал над любой сеткой.

    • ..или вам нужно нарисовать прямоугольники внутри ячеек сетки, но тогда они будут в два раза толще, а рисунки все равно будут мешать друг другу.

Вместо этого вы просто сделать лишь несколько строк, как показано!

Вот мой пример с прочерками:

enter image description here

+0

Thnx TaW. но я хочу сделать эту работу в Rectangle. –

+0

Что вы подразумеваете под этим? – TaW

+0

вы сделали это для Panel, но я хочу сделать эту работу по разделению в Rectangle. Я хочу, чтобы ячейки в прямоугольнике, как и в окне «Просмотр данных». –