2013-07-17 2 views
-1

enter image description hereкраски прямоугольник на заголовке столбца в C#

Я нарисовал заголовок столбца DataGridView и называется событие перекрашивать в случае прокрутки, но это не кажется перекрашивать правильно. Текст в окрашенного прямоугольника получает scettered (см второе изображение) вот мой код,

void dataGridView1_Scroll(object sender, ScrollEventArgs e) 
{ 
    Rectangle rtHeader = this.dataGridView1.DisplayRectangle; 
    rtHeader.Y += 0; 
    rtHeader.Height = this.dataGridView1.ColumnHeadersHeight; 
} 
Rectangle r1; 
void dataGridView1_Paint(object sender, PaintEventArgs e) 
{ 
    string[] monthes = { "APPLE", "MANGO", "CHERRY", "GRAPES", "PINEAPPLE" }; 
    for (int j = 0; j < this.dataGridView1.ColumnCount;) 
    { 
     r1 = this.dataGridView1.GetCellDisplayRectangle(j, -1, true); 
     int w2 = this.dataGridView1.GetCellDisplayRectangle(j + 1, -1, true).Width; 
     r1.X += -2; 
     r1.Y += 30; 
     r1.Width = r1.Width + w2 - 1; 
     r1.Height = r1.Height/3 - 2; 
     e.Graphics.FillRectangle(new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.BackColor), r1); 
     StringFormat format = new StringFormat(); 
     format.Alignment = StringAlignment.Center; 
     format.LineAlignment = StringAlignment.Center; 
     e.Graphics.DrawRectangle(new Pen(Color.Black), r1); 
     e.Graphics.DrawString(monthes[j/2], this.dataGridView1.ColumnHeadersDefaultCellStyle.Font, new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor), r1, format); 
     j += 2; 
    } 
    string[] year = { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY" }; 
    //for (int i = 0; i < this.dataGridView1.ColumnCount;) 
    //{ 
      Rectangle rec = this.dataGridView1.GetCellDisplayRectangle(0, -1, true); 
      int wid = this.dataGridView1.GetCellDisplayRectangle(1, -1, true).Width; 
      rec.X += -2; 
      rec.Y += 1; 
      rec.Width = this.dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible); 
      rec.Height = rec.Height/3 - 2; 
      e.Graphics.FillRectangle(new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.BackColor), rec); 
      StringFormat frm = new StringFormat(); 
      frm.Alignment = StringAlignment.Center; 
      frm.LineAlignment = StringAlignment.Center; 
      e.Graphics.DrawRectangle(new Pen(Color.Black), rec); 
      e.Graphics.DrawString("Favourite fruits", new Font("Times new roman", 16, FontStyle.Regular), new SolidBrush(Color.CornflowerBlue), rec, frm); 
} 

enter image description here

+0

Я понимаю, что проблема, которую вы имели в виду в вопросе HTTP: // StackOverflow .com/questions/17676251/paint-rectangle-on-column-header/17677970 # 17677970 исправлена, не так ли? (видимо, вы удалили строку кода, которую я предложил) – varocarbas

ответ

0
private void dataGridView1_Scroll(object sender, ScrollEventArgs e) 
    { 
     /* 
     Rectangle rtHeader = this.dataGridView1.DisplayRectangle; 
     rtHeader.Y += 0; 
     rtHeader.Height = this.dataGridView1.ColumnHeadersHeight; 
     this.dataGridView1.Invalidate(rtHeader); 

     */ 
     this.dataGridView1.Invalidate(); 
    } 
Смежные вопросы