2013-12-21 49 views
0

我正在使用VS 2010和.NET Framework 4.0。有沒有什麼辦法可以在選中時顯示整個DataGridViewCell(矩形)(鍵不是點擊)。 我有一個DataGridView控制10 - 12列,當沒有顯示單元(物理)到達與鍵,網格不滾動水平。 我正在使用SelectionMode.FullRowSelectStandardTab = false屬性。如何在選中時顯示整個DataGridViewCell(CellEnter事件)?

網格是隻讀的,所述的是,當用戶按下Keys.AppsCurrentCell,將顯示上下文菜單,但是,如果未示出CurrentCell但聚焦(用虛線矩形)的網格不滾動和菜單當不可t出現。

我試着將Frozen = false設置爲所有代碼生成的列沒有成功。

也許裏面dataGridView1_CellEnter事件,設置當前單元格(所有的矩形,而不僅僅是數據)被完全顯示(如果它以前是不可能)

FirstDisplayedCell屬性不正是我的解決方案)

回答

0

嘗試與此屬性設置。

RowHeadersWidthSizeMode=AutoSizeToDisplayedHeaders; 
0

您可以設置網格

AutoSizeColumnMode屬性爲AllCells

它可以幫助你。

1

我已經嘗試了您所描述的內容,並且看起來問題僅在使用鼠標時出現,使用Tab或Arrow鍵將自動爲您聚焦整個單元格。因此,下面的解決方案是處理使用鼠標,允許用戶點擊部分顯示的單元格,然後顯示整個單元格。我們必須處理CellClick事件,使用HorizontalScrollingOffset屬性以編程方式滾動水平滾動條,當然我們要計算安裝滾動自己的:

//CellClick event handler for the dataGridView1 
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){ 
    var colRect = dataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, false); 
    colRect.X = colRect.Right - dataGridView1.Columns[e.ColumnIndex].Width; 
    int offSet = colRect.Right - dataGridView1.Width + 
           SystemInformation.VerticalScrollBarWidth; 
    if (offSet < 0) { 
    var rowHeaderWidth = !dataGridView1.RowHeadersVisible ? 0 : 
          dataGridView1.RowHeadersWidth; 
    offSet = colRect.Left < rowHeaderWidth ? colRect.Left - rowHeaderWidth : 0; 
    } 
    dataGridView1.HorizontalScrollingOffset += offSet; 
} 

UPDATE:用於處理集中使用的密鑰,你可以嘗試處理CellEnter相反,所有上面的代碼仍然是有用的:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e){ 
    //your problem happens only when ReadOnly is true, so 
    //we just need to handle it when ReadOnly is true 
    if(!dataGridView1.ReadOnly) return; 
    //the remaining code... 
    //.... 
} 
+0

我剛纔編輯的問題,我的意思是,當細胞的重點是與鍵**不點擊**。我很抱歉。無論如何,我保持你的代碼,看起來很有趣,只是給了我一些想法考慮,謝謝。 – Shin

+0

@mck看到我的更新,很簡單,不是處理'CellClick',而是處理'CellEnter'事件,我發佈的所有代碼仍然有用。 –

+0

這個問題發生在'ReadOnly'真或假,你的代碼是好的,但是如果你用Ctrl +右箭頭鍵去到最後一個單元格,'colRect'將是一個0x0的矩形.. – Shin

相關問題