1. 程式人生 > >C# TableLayoutPanel控制元件的使用

C# TableLayoutPanel控制元件的使用

由於 本人還是 小白一枚,有很多不懂,現在做專案是用到了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);
        }  
    }

好了 就說這麼多 希望大佬們多提提意見