Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#组合框在DataGridViewComboBoxColumn中的大小和位置_C#_Datagridview - Fatal编程技术网

C#组合框在DataGridViewComboBoxColumn中的大小和位置

C#组合框在DataGridViewComboBoxColumn中的大小和位置,c#,datagridview,C#,Datagridview,问题:由于前几列中的一些图像,我的DataGridView的单元格很高。所以ComboBox列显示了每个单元格的整个高度(和宽度)上的ComboBox排列,这看起来是不可接受的 问题:是否有办法设置组合框的大小和位置,使其在每个单元格中居中并保持其默认大小 注意:通过谷歌搜索,似乎可以通过创建自己的自定义列来承载一个组合框并覆盖绘制事件,但在我走这条路之前,我想确保这是唯一的方法。我刚刚重新创建了您的问题,我必须承认,这太糟糕了!:) 一种解决方法是进入组合框列的属性,将显示样式更改为无 这将导

问题:由于前几列中的一些图像,我的DataGridView的单元格很高。所以ComboBox列显示了每个单元格的整个高度(和宽度)上的ComboBox排列,这看起来是不可接受的

问题:是否有办法设置组合框的大小和位置,使其在每个单元格中居中并保持其默认大小


注意:通过谷歌搜索,似乎可以通过创建自己的自定义列来承载一个组合框并覆盖绘制事件,但在我走这条路之前,我想确保这是唯一的方法。

我刚刚重新创建了您的问题,我必须承认,这太糟糕了!:)

一种解决方法是进入组合框列的属性,将
显示样式更改为

这将导致在不编辑单元格时仅显示选定的文本,在编辑单元格之前,组合框不会显示

当行变高时,可能需要更改
DefaultCellStyle
,以便将
对齐设置为
左上


如果希望在不编辑单元格时显示组合框,请查看事件,它允许您自定义单元格的外观。这可能允许您将组合框绘制到单元格上

@mlsteeves,感谢您指出这一事件。我不知道我是怎么忽略它的。但这就是我现在要做的,似乎提供了我想要的结果:

void DataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex == ComboBoxColumnIndex)
    {
        ComboBox comboBox = this.DataGridView.Controls["ColumnComboBox" + e.RowIndex] as ComboBox;
        if (comboBox == null)
        {
            comboBox = this.GetNewComboBox(e.RowIndex);
            comboBox.Name = "ColumnComboBox" + e.RowIndex;
            this.DataGridView.Controls.Add(comboBox);
        }

        if (comboBox != null)
        {
            comboBox.Width = e.CellBounds.Width - 10;
            comboBox.Left = e.CellBounds.Left + ((e.CellBounds.Width - comboBox.Width) / 2);
            comboBox.Top = e.CellBounds.Top + ((e.CellBounds.Height - comboBox.Height) / 2);
        }
    }
}