C#ComboBox在DataGridViewComboBoxColumn中调整大小和位置

时间:2009-12-03 01:27:40

标签: c# datagridview

问题:由于之前列中的某些图片,我的DataGridView具有较高的单元格。因此,ComboBox列显示了每个单元格的整个高度(和宽度)上的ComboBox,这看起来是不可接受的。

问题:有没有办法设置ComboBox的大小和位置,使其在每个单元格中居中并保持其默认大小?

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

2 个答案:

答案 0 :(得分:2)

@mlsteeves,谢谢你指出了CellPainting事件。我不知道我是怎么设法忽略它的。但这就是我现在要做的,似乎提供了我正在寻找的结果:

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);
        }
    }
}

答案 1 :(得分:1)

我刚刚重新创建了你的问题,我不得不承认,这很糟糕! :)

解决方法之一是进入ComboBox列的属性,并将Display Style更改为Nothing

这样只会在单元格未编辑时显示所选文本,在编辑单元格之前,ComboBox不会显示。

当您的行增长时,您可能希望更改DefaultCellStyle,以便将Alignment设置为Top Left

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