菜单

c# winForm TableLayoutPanel学习 合并行的布局及动态扩充删除内部控件

2019年5月2日 - 金沙编程资讯

 
前些时间笔者有1个爱人面试集团的时候遭受那么些面试题,他也给了份原题给本身看见,并从未什么样越发的要义,关于那1类主题素材,如何在网格上的单元格嵌入多个控件(如开关、超链接等)难点,笔者在网络检索了下那类难题,开掘大多解答可是都杂乱,本篇小说扶助大家驾驭哪些应对那类难题。

先经过在IDE中拉出这样的成效图 以读书相关属性

不可能了,很多地点找不到答案,csdn也没人回答,惟有贴到那了。
斑竹手下留情,二天后移贴

using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

 
微软提供的DataGirdView网格控件可透过GetCellDisplayRectangle()方法将须求的控件嵌入单元格中,如:

图片 1

万1您不排序,直接点击 “del“按键,没万分,能够健康删除。
可是一旦你单击列名字为 “Dname”的列,排了一下序,然后点击
“del“开关,就产生一个老大,上面是本人的代码。

namespace WSerializable
{
 /// <summary>
 /// MySerialObject 的摘要表达。
 /// </summary>
 ///
 [Serializable]
 public class MySerialObject
 {
  public MySerialObject()
  {
  }

this.Load += Form1_Load;

地点效果的相关代码

图片 2using System;
图片 3using System.Drawing;
图片 4using System.Collections;
图片 5using System.ComponentModel;
图片 6using System.Windows.Forms;
图片 7using System.Data;
图片 8
图片 9namespace deldatagridcolumn
图片 10图片 11图片 12{
图片 13    public class Form1 : System.Windows.Forms.Form
图片 14图片 15    图片 16{
图片 17        private System.Windows.Forms.Button button2;
图片 18        private System.ComponentModel.Container components = null;
图片 19        private System.Windows.Forms.DataGrid grid;
图片 20
图片 21        DataTable dt = new DataTable(“T”);
图片 22        public Form1()
图片 23图片 24        图片 25{
图片 26            InitializeComponent();
图片 27        }
图片 28
图片 29        protected override void Dispose( bool disposing )
图片 30图片 31        图片 32{
图片 33            if( disposing )
图片 34图片 35            图片 36{
图片 37                if (components != null)
图片 38图片 39                图片 40{
图片 41                    components.Dispose();
图片 42                }
图片 43            }
图片 44            base.Dispose( disposing );
图片 45        }
图片 46
图片 47        private void InitializeComponent()
图片 48图片 49        图片 50{
图片 51            this.grid = new System.Windows.Forms.DataGrid();
图片 52            this.button2 = new System.Windows.Forms.Button();
图片 53            ((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
图片 54            this.SuspendLayout();
图片 55            // 
图片 56            // grid
图片 57            // 
图片 58            this.grid.DataMember = “”;
图片 59            this.grid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
图片 60            this.grid.Location = new System.Drawing.Point(24, 16);
图片 61            this.grid.Name = “grid”;
图片 62            this.grid.Size = new System.Drawing.Size(448, 288);
图片 63            this.grid.TabIndex = 0;
图片 64            // 
图片 65            // button2
图片 66            // 
图片 67            this.button2.Location = new System.Drawing.Point(400, 312);
图片 68            this.button2.Name = “button2”;
图片 69            this.button2.TabIndex = 2;
图片 70            this.button2.Text = “Del”;
图片 71            this.button2.Click += new System.EventHandler(this.button2_Click);
图片 72            // 
图片 73            // Form1
图片 74            // 
图片 75            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
图片 76            this.ClientSize = new System.Drawing.Size(504, 341);
图片 77            this.Controls.Add(this.button2);
图片 78            this.Controls.Add(this.grid);
图片 79            this.Name = “Form1”;
图片 80            this.Text = “Form1”;
图片 81            this.Load += new System.EventHandler(this.Form1_Load);
图片 82            ((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
图片 83            this.ResumeLayout(false);
图片 84
图片 85        }
图片 86
图片 87        [STAThread]
图片 88        static void Main()
图片 89图片 90        图片 91{
图片 92            Application.Run(new Form1());
图片 93        }
图片 94
图片 95        private void Form1_Load(object sender, System.EventArgs e)
图片 96图片 97        图片 98{
图片 99
图片 100            DataColumn dc = new DataColumn(“dcode”,typeof(string));
图片 101            DataColumn dc1 = new DataColumn(“dname”,typeof(string));
图片 102            dt.Columns.Add(dc);
图片 103            dt.Columns.Add(dc1);
图片 104            DataRow dr = dt.NewRow();
图片 105            dr[0] = “aa”;
图片 106            dr[1] = “aa”;
图片 107            dt.Rows.Add(dr);
图片 108
图片 109            grid.DataSource = dt;
图片 110
图片 111            DataGridTableStyle myGridStyle = new DataGridTableStyle();
图片 112            myGridStyle.MappingName = “T”;
图片 113
图片 114
图片 115            DataGridTextBoxColumn style = new DataGridTextBoxColumn();
图片 116            style.MappingName  = “dcode”;
图片 117            style.HeaderText   = “DCODE”;
图片 118            style.Width            = 100;
图片 119            myGridStyle.GridColumnStyles.Add(style);
图片 120
图片 121            DataGridTextBoxColumn style1 = new DataGridTextBoxColumn();
图片 122            style1.MappingName  = “dname”;
图片 123            style1.HeaderText   = “DName”;
图片 124            style1.Width        = 100;
图片 125
图片 126            myGridStyle.GridColumnStyles.Add(style1);
图片 127            grid.TableStyles.Add(myGridStyle);
图片 128
图片 129        }
图片 130
图片 131
图片 132        private void button2_Click(object sender, System.EventArgs e)
图片 133图片 134        图片 135{
图片 136            if(dt.Columns.Count > 1)
图片 137图片 138            图片 139{
图片 140                dt.Columns.RemoveAt(1);
图片 141                //grid.TableStyles[0].GridColumnStyles.RemoveAt(1);
图片 142            }
图片 143            button2.Enabled = false;
图片 144        }
图片 145    }
图片 146}
图片 147

  private Hashtable hs = new Hashtable();
  
  public Hashtable HT
  {
   get
   {
    return hs;
   }
  }
 }

void Form1_Load(object sender, EventArgs e)
{
  MulAutoBtnEdit();
}

 

 

 [Serializable]
 public class MyObject
 {
  public MyObject()
  {
   x=y=height=width=0;
  }

private void MulAutoBtnEdit()
{
  this.dataGridView一.Columns.Add(“ColBtn艾德it”, “嵌入操作开关”);
  this.dataGridView1.Columns[“ColBtnEdit”].Width = 150;
  int index = this.dataGridView1.Columns[“ColBtnEdit”].Index;
  this.dataGridView1.Columns[“ColBtnEdit”].Resizable =
DataGridViewTriState.False;
  Button btnAdd = GetBtnByType(“BtnAdd”,”新增”);
  Button btnEdit = GetBtnByType(“BtnEdit”, “修改”);
  Button btnDel = GetBtnByType(“BtnDel”, “删除”);
  this.dataGridView1.Controls.Add(btnAdd);
  this.dataGridView1.Controls.Add(btnEdit);
  this.dataGridView1.Controls.Add(btnDel);
  Rectangle rectangle =
this.dataGridView一.GetCellDisplayRectangle(index, 0,
true);//获取当前单元格上的矩形区域
  btnAdd.Size = btnEdit.Size = btnDel.Size = new Size(rectangle.Width
/ 3 + 1, rectangle.Height);
  btnAdd.Location = new Point(rectangle.Left, rectangle.Top);
  btnEdit.Location = new Point(rectangle.Left + btnAdd.Width,
rectangle.Top);
  btnDel.Location = new Point(rectangle.Left + btnAdd.Width +
btnDel.Width, rectangle.Top);
}

图片 148图片 149Code
#region Windows 窗体设计器生成的代码

  private int x;
  private int y;
  private int height;
  private int width;

private Button GetBtnByType(string strBtnName,string strBtnText)
{
  Button btn = new Button();
  btn.Name = strBtnName;
  btn.Text = strBtnText;
  btn.Click += btn_Click;
  return btn;
}

        /// <summary>
        /// 设计器帮助所需的不二诀窍 – 不要
        /// 使用代码编辑器修改此格局的始末。
        /// </summary>
        private void InitializeComponent()
        {
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            this.button5 = new System.Windows.Forms.Button();
            this.button6 = new System.Windows.Forms.Button();
            this.tableLayoutPanel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // tableLayoutPanel1
            // 
            this.tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
            this.tableLayoutPanel1.ColumnCount = 2;
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tableLayoutPanel1.Controls.Add(this.button1, 0, 0);
            this.tableLayoutPanel1.Controls.Add(this.button2, 1, 0);
            this.tableLayoutPanel1.Controls.Add(this.button3, 1, 1);
            this.tableLayoutPanel1.Controls.Add(this.button4, 0, 2);
            this.tableLayoutPanel1.Controls.Add(this.button5, 0, 3);
            this.tableLayoutPanel1.Controls.Add(this.button6, 1, 2);
            this.tableLayoutPanel1.Location = new System.Drawing.Point(46, 35);
            this.tableLayoutPanel1.Name = “tableLayoutPanel1”;
            this.tableLayoutPanel1.RowCount = 5;
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
            this.tableLayoutPanel1.Size = new System.Drawing.Size(200, 195);
            this.tableLayoutPanel1.TabIndex = 1;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(4, 4);
            this.button1.Name = “button1”;
            this.tableLayoutPanel1.SetRowSpan(this.button1, 2);
            this.button1.Size = new System.Drawing.Size(75, 79);
            this.button1.TabIndex = 0;
            this.button1.Text = “button1”;
            this.button1.UseVisualStyleBackColor = true;
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(103, 4);
            this.button2.Name = “button2”;
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = “button2”;
            this.button2.UseVisualStyleBackColor = true;
            // 
            // button3
            // 
            this.button3.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.button3.Location = new System.Drawing.Point(112, 53);
            this.button3.Name = “button3”;
            this.button3.Size = new System.Drawing.Size(75, 23);
            this.button3.TabIndex = 2;
            this.button3.Text = “button3”;
            this.button3.UseVisualStyleBackColor = true;
            // 
            // button4
            // 
            this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.button4.Location = new System.Drawing.Point(4, 90);
            this.button4.Name = “button4”;
            this.button4.Size = new System.Drawing.Size(92, 36);
            this.button4.TabIndex = 3;
            this.button4.Text = “button4”;
            this.button4.UseVisualStyleBackColor = true;
            // 
            // button5
            // 
            this.button5.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.button5.Location = new System.Drawing.Point(12, 139);
            this.button5.Name = “button5”;
            this.button5.Size = new System.Drawing.Size(75, 23);
            this.button5.TabIndex = 4;
            this.button5.Text = “button5”;
            this.button5.UseVisualStyleBackColor = true;
            // 
            // button6
            // 
            this.button6.Location = new System.Drawing.Point(103, 90);
            this.button6.Name = “button6”;
            this.tableLayoutPanel1.SetRowSpan(this.button6, 2);
            this.button6.Size = new System.Drawing.Size(75, 79);
            this.button6.TabIndex = 5;
            this.button6.Text = “button6”;
            this.button6.UseVisualStyleBackColor = true;
            // 
            // tableLayoutPanelForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 265);
            this.Controls.Add(this.tableLayoutPanel1);
            this.Name = “tableLayoutPanelForm”;
            this.Text = “tableLayoutPanelForm”;
            this.tableLayoutPanel1.ResumeLayout(false);
            this.ResumeLayout(false);

  
  private string name;

private void btn_Click(object sender, EventArgs e)
{
  if(sender is Button)
  {
    Button btn = (Button)sender;
    MessageBox.Show(string.Format(“点击开关:{0}”,btn.Text));
  }
}

        }

  public int X
  {
   get
   {
    return x;
   }
   set
   {
    x = value;
   }
  }
  public int Y
  {
   get
   {
    return y;
   }
   set
   {
    y = value;
   }
  }

  效果图:

        #endregion

  public int Height
  {
   get
   {
    return height;
   }
   set
   {
    height = value;
   }
  }

图片 150

 

  public int Width
  {
   get
   {
    return width;
   }
   set
   {
    width = value;
   }
  }

 
通过以上的操作就可以将四个开关嵌入到单元格中,不思索维护性、功效难题,只在于给予大家思路,对于“超链接”控件等都可用类似的方法管理,类似网站如下:

在上头属性学习的底子上
通过编码来创建我们必要的TableLayoutPanel的连锁布局

  public string Name
  {
   get
   {
    return name;
   }
   set
   {
    name = value;
   }
  }

 

上边想要落成的效果为:

 }
}

  在网络发行另一种形式,思路大致,地址小编也贴出来:

点击三回开关 TableLayoutPanel将新添两行

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Text;

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图