问题:由于之前列中的某些图片,我的DataGridView具有较高的单元格。因此,ComboBox列显示了每个单元格的整个高度(和宽度)上的ComboBox,这看起来是不可接受的。
问题:有没有办法设置ComboBox的大小和位置,使其在每个单元格中居中并保持其默认大小?
注意:通过谷歌搜索它似乎可以通过创建我自己的自定义列来托管ComboBox并覆盖绘制事件,但在我走这条路线之前,我想确保这是唯一的方法。
答案 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绘制到您的单元格上。