快捷搜索:
来自 计算机编程 2019-07-15 08:58 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

合併行的布局及动态扩展删除内部控件,DataGri

图片 1

图片 2图片 3Code
public partial class tableLayoutPanelForm : Form
{
    public tableLayoutPanelForm()
    {
        InitializeComponent();
    }

  通过以上的操作即可将多个按钮嵌入到单元格中,不考虑维护性、效率问题,只在于给予大家思路,对于“超链接”控件等都可用类似的方法处理,类似网址如下:

其中我们也将对按钮加入相关事件

  

相关示例代码如下

  A young idler ~ an old beggar !

在上面属性学习的基础上 通过编码来创建我们需要的TableLayoutPanel的相关布局

  效果图:

    private void tableLayoutPanelForm_Load(object sender, EventArgs e)
    {
        this.panel1.AutoScroll = true;
        this.panel1.BorderStyle = BorderStyle.FixedSingle;

private void MulAutoBtnEdit()
{
  this.dataGridView1.Columns.Add("ColBtnEdit", "嵌入操作按钮");
  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.dataGridView1.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);
}

点击一次按钮 TableLayoutPanel将新增两行

this.Load = Form1_Load;

再点击一次按钮 将又会新增两行

  关于第三方DevExpress组件上的网格如GridView等,本人并没有找到好的解决上面问题的方法,有不足之处,知情人事可在留言板上赐教。

        iClickedTimes ;
    }
    //自身的Name
    private void btn1Click(object sender, EventArgs e)
    {
        Button btn1 = (Button)sender;
        MessageBox.Show(btn1.Name);
    }
    //通过命名规则 得到其对应btn1的Text
    private void btn2Click(object sender, EventArgs e)
    {
        Button btn2 = (Button)sender;
        string btn2ID = btn2.Name.Substring(6);//去掉Name中的button
        //其对应btn1的Name为
        string btn1Name = "button"   Convert.ToString((Convert.ToInt32(btn2ID) - 1));
        //
        TableLayoutPanel tabPanel = (TableLayoutPanel)(this.panel1.Controls[0]);
        string btn1Text = ((Button)(tabPanel.Controls[btn1Name])).Text;
        MessageBox.Show(btn1Text);
    }

  前段时间我有一个朋友面试公司的时候遇到这个面试题,他也给了份原题给我瞧瞧,并没有什么特别的要点,关于这一类问题,如何在网格上的单元格嵌入多个控件(如按钮、超链接等)问题,我在网上搜索了下这类问题,发现很多解答但是都杂乱,本篇文章帮助大家了解如何应对这类问题。

button1    button2

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

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

  在网上发行另一种方式,思路差不多,地址我也贴出来:

               button3

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

        }

 

button4   button5

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

图片 6

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

    int iClickedTimes = 0;
    //每点击一次 新增如下结构
    //btn1    btn2
    //        btn3
    //btn1跨两行
    private void button1_Click(object sender, EventArgs e)
    {           
        TableLayoutPanel tabPanel = (TableLayoutPanel)(this.panel1.Controls[0]);
        tabPanel.RowCount = (iClickedTimes   1) * 2;  //再增两行          

 

        //一种删除方法 得到其对应btn1 btn2的Name
        string btn3ID = btn3.Name.Substring(6);
        string btn1Name = "button"   Convert.ToString((Convert.ToInt32(btn3ID) - 2));
        string btn2Name = "button"   Convert.ToString((Convert.ToInt32(btn3ID) - 1));
        tabPanel.Controls.Remove(btn3);
        tabPanel.Controls.Remove(tabPanel.Controls[btn2Name]);
        tabPanel.Controls.Remove(tabPanel.Controls[btn1Name]);
    }

        TableLayoutPanel tabPanel = new TableLayoutPanel();
        tabPanel.ColumnCount = 2;
        
        this.panel1.Controls.Add(tabPanel);
    }

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:合併行的布局及动态扩展删除内部控件,DataGri

关键词: