2009-12-03 67 views
1

問題:由於之前的列中有一些圖像,我的DataGridView有高單元格。所以ComboBox列在每個單元格的整個高度(和寬度)上都顯示了一個ComboBox,這看起來是不可接受的。C#ComboBox在DataGridViewComboBoxColumn中的大小和放置位置

問題:有沒有辦法設置組合框的大小和位置,以便它在每個單元格中居中並保持其默認大小?

注意:從谷歌上搜索周圍看來這也許可以通過創建自己的自定義列主辦組合框和覆蓋漆事件,但在此之前我走這條路我要確保這是唯一的辦法。

回答

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

我剛剛重新創建了你的問題,我不得不承認,這很糟糕! :)解決

一種方法是進入你的組合框列的屬性,並更改Display StyleNothing

當單元格不在編輯時,這將導致只顯示選定的文本,直到編輯單元格時,ComboBox纔會顯示。

當您的行增長得更高時,您可能需要更改DefaultCellStyle,以便Alignment設置爲Top Left

如果您希望在未編輯單元格時顯示組合框,請查看CellPainting事件,它允許您自定義單元格的外觀。這可能允許你將你的ComboBox繪製到你的單元格上。