C# TableLayoutPanel控制元件的使用
好了廢話不多說了,接下來說一下TableLayoutPanel這個控制元件吧
TableLayoutPanel是VS的原生控制元件,可以按下快捷鍵開啟工具箱(ctre+alt+x)然後找到TableLayoutPanel拖到頁面上
然後就可以看到是這樣的,因為TableLayoutPanel多數用來動態新增刪除控制元件,所以在winform專案中如果要用的動態的話,這個是最好了。
右上角有一個三角符號,你可以點選看看。
好了 廢話不多說了 我們來說說 給它美化一下邊框和單元格:
//在單元格需要重繪時發生,這個是吧單元格的線條畫成紅色的
private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
// 單元格重繪
Pen pp = new Pen(Color.Red);
e.Graphics.DrawRectangle(pp, e.CellBounds.X, e.CellBounds.Y, e.CellBounds.X + e.CellBounds.Width - 1, e.CellBounds.Y + e.CellBounds.Height - 1);
}
///當控制元件需要重繪時發生,就是把邊框顏色畫成紅色
private void tableLayoutPanel_Paint(object sender, PaintEventArgs e)
{
Pen pp = new Pen(Color.Red);
e.Graphics.DrawRectangle(pp, e.ClipRectangle.X - 1, e.ClipRectangle.Y - 1, e.ClipRectangle.X + e.ClipRectangle.Width - 0, e.ClipRectangle.Y + e.ClipRectangle.Height - 0);
}
當你放大或者動態新增刪除資料時,控制元件會閃爍是吧,下面我們就來解決
這個必須放在窗體事件中 就是為了防止控制元件閃爍
tableLayoutPanel1.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(tableLayoutPanel1, true, null);
或者你覺得麻煩了 那可以自己寫一個控制元件:
//TableLayoutPanel 繪製邊框,防閃屏
public class HSkinTableLayoutPanel : TableLayoutPanel
{
public HSkinTableLayoutPanel()
{
// 防止閃屏
this.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(this, true, null);
}
private Color borderColor = Color.Red;
public Color BorderColor
{
get { return borderColor; }
set { borderColor = value; }
}
protected override void OnCellPaint(TableLayoutCellPaintEventArgs e)
{
//繪製邊框
base.OnCellPaint(e);
Pen pp = new Pen(BorderColor);
e.Graphics.DrawRectangle(pp, e.CellBounds.X, e.CellBounds.Y, e.CellBounds.X + this.Width - 1, e.CellBounds.Y + this.Height - 1);
}
}
好了 就說這麼多 希望大佬們多提提意見