winform 中datagridview添加checkbox的位置

时间:2021-11-21 08:54:13
代码如下,但是添加的checkbox不在第0列的中间,如何设置?
 System.Windows.Forms.CheckBox ckBox = new System.Windows.Forms.CheckBox();
                ckBox.Size = new Size(15, 15);
                //ckBox.Text = "全选";
                ckBox.Checked = true;
                ckBox.BackColor = Color.FromArgb(0, 40, 60, 82); //设置背景透明
                System.Drawing.Rectangle rect =
                dgv.GetCellDisplayRectangle(1, 0, true);   //获取位置            
                ckBox.Location = rect.Location;//设置位置
                ckBox.CheckedChanged += new EventHandler(ckBox_CheckedChanged);
                dgv.Controls.Add(ckBox);



winform 中datagridview添加checkbox的位置

12 个解决方案

#1


什么意思,怎么不在中间

#2


在界面上直接拖到中间不就行了

#3


你这是把单独一个checkbox加到dgv里去了,而不是加了一列
dgv.GetCellDisplayRectangle(1, 0, true);   这个是你给checkbox的坐标,在左上角

#4


看你列里已经有checkbox了,你是想加个"全选"吧?
你得获取第一列标题的宽度和高度,然后计算中间在什么位置.

#5


dgv.GetCellDisplayRectangle(1, 0, true);   
获取第1行,第0列的坐标范围?
你表里只有1行,是第0行,你获取第1行,能获取到坐标?
而且你实际上应该是想获取标题的坐标,而不是单元格的坐标.

#6



 dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置     

不过好像也没法在这一列Header上居中

#7


引用 6 楼 andywangguanxi 的回复:

 dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置     

不过好像也没法在这一列Header上居中

getcell是获取的单元格啊,不是列标题.

#8


用GetColumnDisplayRectangle(0,true);
获取第0列的列标题位置

#9


然后想要居中,而不是放到最左边,你还要获取第0列的宽度,自己算一下中间是什么坐标

#10


谢谢各位!实在添加表头添加一个全选的textbox,后来解决了,自己预估了一个大概的范围,就OK了。

#11


 System.Windows.Forms.CheckBox ckBox = new System.Windows.Forms.CheckBox();
                ckBox.Size = new Size(15, 15);
                //ckBox.Text = "全选";
                ckBox.Checked = true;
                ckBox.BackColor = Color.FromArgb(0, 40, 60, 82); //设置背景透明

                System.Drawing.Rectangle rect =
                dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置  
                Rectangle oRectangle =dgv.GetCellDisplayRectangle(0, 0, true);
                Point oPoint = new Point();
                oPoint.X = 90 + (oRectangle.Width - ckBox.Width) / 2 + 1;
                oPoint.Y = 10 + (oRectangle.Height - ckBox.Height) / 2 + 1;                       
                //ckBox.Location = rect.Location;//设置位置
                ckBox.Location = oPoint;
                ckBox.CheckedChanged += new EventHandler(ckBox_CheckedChanged);
                dgv.Controls.Add(ckBox);

#12


引用 10 楼 waterliu2003 的回复:
谢谢各位!实在添加表头添加一个全选的textbox,后来解决了,自己预估了一个大概的范围,就OK了。

预估也行,但是要保证你第0列宽度不能变,否则就又偏了.
用8楼代码可以获取到列标题的位置和宽度,就别先获取单元格再硬套了

#1


什么意思,怎么不在中间

#2


在界面上直接拖到中间不就行了

#3


你这是把单独一个checkbox加到dgv里去了,而不是加了一列
dgv.GetCellDisplayRectangle(1, 0, true);   这个是你给checkbox的坐标,在左上角

#4


看你列里已经有checkbox了,你是想加个"全选"吧?
你得获取第一列标题的宽度和高度,然后计算中间在什么位置.

#5


dgv.GetCellDisplayRectangle(1, 0, true);   
获取第1行,第0列的坐标范围?
你表里只有1行,是第0行,你获取第1行,能获取到坐标?
而且你实际上应该是想获取标题的坐标,而不是单元格的坐标.

#6



 dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置     

不过好像也没法在这一列Header上居中

#7


引用 6 楼 andywangguanxi 的回复:

 dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置     

不过好像也没法在这一列Header上居中

getcell是获取的单元格啊,不是列标题.

#8


用GetColumnDisplayRectangle(0,true);
获取第0列的列标题位置

#9


然后想要居中,而不是放到最左边,你还要获取第0列的宽度,自己算一下中间是什么坐标

#10


谢谢各位!实在添加表头添加一个全选的textbox,后来解决了,自己预估了一个大概的范围,就OK了。

#11


 System.Windows.Forms.CheckBox ckBox = new System.Windows.Forms.CheckBox();
                ckBox.Size = new Size(15, 15);
                //ckBox.Text = "全选";
                ckBox.Checked = true;
                ckBox.BackColor = Color.FromArgb(0, 40, 60, 82); //设置背景透明

                System.Drawing.Rectangle rect =
                dgv.GetCellDisplayRectangle(0, -1, true);   //获取位置  
                Rectangle oRectangle =dgv.GetCellDisplayRectangle(0, 0, true);
                Point oPoint = new Point();
                oPoint.X = 90 + (oRectangle.Width - ckBox.Width) / 2 + 1;
                oPoint.Y = 10 + (oRectangle.Height - ckBox.Height) / 2 + 1;                       
                //ckBox.Location = rect.Location;//设置位置
                ckBox.Location = oPoint;
                ckBox.CheckedChanged += new EventHandler(ckBox_CheckedChanged);
                dgv.Controls.Add(ckBox);

#12


引用 10 楼 waterliu2003 的回复:
谢谢各位!实在添加表头添加一个全选的textbox,后来解决了,自己预估了一个大概的范围,就OK了。

预估也行,但是要保证你第0列宽度不能变,否则就又偏了.
用8楼代码可以获取到列标题的位置和宽度,就别先获取单元格再硬套了