윈폼, 테이블레이아웃 - 레이블 동적으로 더하기
우선 테이블 레이아웃에 걸린 마진, 패딩 다 0으로 만들어줘야한다.
public partial class TableLayoutLabelAddForm : Form
{
private const int ROW_HEIGHT = 30;
///*****************************컨트롤에 자식 더할 때 컨트롤 깜빡임 없애기***********************
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
public static void SuspendDrawing(Control parent)
{
SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
}
public static void ResumeDrawing(Control parent)
{
SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
parent.Refresh();
}
//************************************************************************
public TableLayoutLabelAddForm (){
InitializeComponent();
SuspendDrawing(tableLayoutPanel1);
int rowIndex= AddTableRow();
tableLayoutPanel1.Controls.Add(GetTableLabel("레이블값"), 0, rowIndex);
ResumeDrawing(tableLayoutPanel1);
}
private int AddTableRow()
{
int index = tableLayoutPanel1.RowCount++;
RowStyle style = new RowStyle(SizeType.Absolute, ROW_HEIGHT);
tableLayoutPanel1.RowStyles.Add(style);
tableLayoutPanel1.Height = (ROW_HEIGHT * tableLayoutPanel1.RowCount) + 6;
return index;
}
/// <summary>
/// 테이블레이아웃에 넣을 레이블 생성 반환
/// </summary>
/// <param name="Text">레이블명</param>
/// <returns></returns>
private Label GetTableLabel(String Text)
{
Label lbl = new Label();
//추후 바인딩한 레이블만 지울수있도록 태그 삽입
lbl.Tag = "Binded";
lbl.Text = Text;
lbl.AutoSize = false;
lbl.BackColor = Color.White;
lbl.Dock = DockStyle.Fill;
lbl.TextAlign = ContentAlignment.MiddleCenter;
return lbl;
}