2012-10-29 69 views
0

我想承載一個自定義控件datagridviewcell如何在datagridviewcell上繪製自定義控件?

唯一的好參考我已經是http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

但是,我想單元中顯示,而不是在

public class CustomCell : DataGridViewTextBoxCell 
{ 
    protected override void Paint(System.Drawing.Graphics graphics, 
     System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, 
     int rowIndex, DataGridViewElementStates cellState, object value, object 
      formattedValue, string errorText, DataGridViewCellStyle cellStyle, 
      DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) 
    { 
      base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, 
      formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);    
    } 
} 

任何人都可以指導我怎麼做我自己的用戶控件?

回答

1

爲了節省資源,DataGridView控件中的單元格大部分時間都處於顯示模式,只有當用戶使用鼠標或鍵盤輸入單元格時才更改爲編輯模式。你在你的問題中引用的例子被認爲是最佳做法,因爲編輯控件(在這種情況下,DateTimePicker,但可以很容易地是你自己的自定義用戶控件)只有在編輯模式下才會出現,因此只有一個細胞一次。

當單元格不處於編輯模式時,它應該使用DataGridViewCell子類的Paint方法中的邏輯來呈現其值的等效表示形式。您可以通過以下幾種方式之一來執行此操作:

  • 只需根據文本或圖像的值將文本或圖像繪製到單元格邊界上;不要試圖複製編輯控件的外觀。
  • 使用ControlPaintVisualStyleRenderer(注意:這涉及大量額外的工作)來模擬編輯控件的外觀。
  • 將繪畫代碼從您的自定義用戶控件移到工具類中,以便它和單元格都可以使用相同的繪畫代碼。

在大多數情況下,第一個選項就足夠了;如果單元看起來與您的編輯控件完全相同很重要,則只嘗試其他方法之一。

+0

如何繪製一個用戶控件到單元格中進行顯示模式? – Melvin

+1

@Melvin如果它是一個完全用戶繪製的控件,那麼您可以運行與控件的「Paint」方法相同的代碼。控制(使用其他控件)時,可以將控件繪製到中間的「位圖」(使用「DrawToBitmap」方法),然後將位圖繪製到單元上,否則必須返回到第二種技術我描述過。 –

相關問題