2013-02-14 2 views
2

У меня есть TableLayoutPanel в настоящее время с несколькими столбцами + столбцами. Он заполняется циклом for, который будет отличаться при каждом запуске, зависящем от вывода SQL Query.Изменение цветов ячеек таблицыLayoutPanel по переменным во время выполнения?

void tblTableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) 
    { 
     if (e.Row == 2 || e.Row == 4) 
     { 
      Graphics g = e.Graphics; 
      Rectangle r = e.CellBounds; 
      g.FillRectangle(Brushes.Red, r); 
     } 
    } 

Это код, который я получил в настоящее время окрашивать отдельные строки, но я хотел бы, чтобы иметь возможность окрашивать отдельные клетки в зависимости от 2-х переменных (J и K).

   TableLayoutPanel.Controls.Add(label, J, K); 

Аналогично вот пример того, как я добавил метку на ячейку в TableLayoutPanel с использованием J и K. Можно перегрузить метод CellPaint, чтобы позволить J и К, которые будут использоваться в нем? или если да, то как я могу перекрасить ячейки во время выполнения?

Ранее я задал этот вопрос и получил следующее решение;

CellPaint - это событие, а не способ. Я предлагаю вам создать метод GetColor (int row, int column), который возвращает цветную кисть, а затем в событии CellPaint вызовет ваш метод с помощью e.Row и e.Column.

Я не совсем уверен, как это будет работать, поскольку переменные, которые я использую, находятся в основной программе, не нужно ли мне сравнивать их с переменными в моем методе? или установить их где-то для сравнения, а затем после этого сделать событие. Может ли кто-нибудь объяснить это немного яснее для меня? или, может быть, дать мне пример? Благодарю.

ответ

2

Вот пример:

void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    Rectangle r = e.CellBounds; 
    g.FillRectangle(GetBrushFor(e.Row, e.Column), r); 
} 

private Brush GetBrushFor(int row, int column) 
{ 
    if (row == 2 && column == 1) 
     return Brushes.Red; 

    // other logic 
    // ... 
    // return default Brush 
} 

Примечание - это выглядит странно, что вы хотите назначить цвет на основе только на строки и индекс столбца, а не какой-то бизнес-логики (то есть в зависимости от данных, отображаемых в ячейке) ,

+0

но если я хочу, чтобы строка и столбцы были равны значению двух переменных, которые у меня есть в form_load, возможно? –

+0

@ DanBarker делает эти поля переменных вашего класса формы, тогда оба будут доступны в методе GetBrushFor –

+0

. Ах да, конечно .. Я не знаю, почему я этого не осознавал ... Спасибо! –

0

Одним из возможных решений является сохранение j и k в Control.Tag, например, в виде массива объектов и во время чейки paiting получить j и k обратно из элемента управления, что находится в этой ячейке.

Смежные вопросы