2009-09-27 29 views
2

我想建議我是否應該從頭編程以下我自己或使用第三方組件。如果有一個第三方組件適合賬單沒有太多的包袱,我會很感激的建議。業主繪製的網格 - NET

我想要一個組件,它是一個單元矩陣,就像一個網格控件。我不需要編輯,不需要選擇,也不需要動態調整列的大小,不需要默認的單元格繪製行爲,鼠標移過時不會產生任何效果,也不需要鍵盤快捷鍵。

我所需要做的就是自己繪製每個單元格,如果網格的大小超過父組件的可用空間,則會出現滾動條。

換句話說,我希望能夠說: grid.Invalidate()

,然後我得到一個回調爲每個可見單元格是這樣的:

無效DrawCell(INT X, int y,Graphics g,Rectangle cellDrawingRect)

+0

您最多需要顯示多少個單元格?總行數/列數? – 2009-09-27 04:02:32

回答

2

我的建議是?計算網格的大小,製作一個尺寸的圖像,繪製網格,並將圖像放入一個PictureBox中,然後將該PictureBox放入一個ScrollableControl中。

你不需要搞亂Control.Paint,因爲picturebox會爲你處理。

如果你這麼傾向於,你可以把所有這些放在UserControl中。這使得你的代碼更具可重用性和更便攜性。

+0

使用這種方法是否也可以平滑更新圖片框顯示的圖像的位和片段,還是每次都必須用新圖像完全替換它? – 2009-09-27 05:49:18

+0

不,您可以重新繪製相同的圖像。只要確保在完成繪圖時調用PictureBox.Invalidate()。 – 2009-09-27 21:58:57

0

如果您只是編寫自己的控件(從ScrollableControl派生),這看起來很平凡。處理Control.Paint繪製單元格,並使用Horizo​​ntalScroll和VerticalScroll屬性來調整滾動條。

0

這裏是正是這個問題我的一個較早的咆哮:

Need help creating control to display data

我肯定會推薦這樣做你自己,特別是因爲它本質上是一個只讀控制。大多數現成的網格組件的構建要比您需要的要多得多,並且將它們摔成所需的形狀可能比從頭開始編寫自己的網格更容易。如Charlie Salts提到的,在一個大的PictureBox上繪製整個事物然後在一個較小的Panel上移動它可能會更容易,但這取決於整個網格的大小。位圖可能佔用大量內存。

+0

是的,我忘記了位圖大小。這是爲什麼有人應該處理Control.Paint的一個很好的理由。 – 2009-09-27 05:13:09

+0

不是太大。也許最大2500x2500像素。這個可見子集將小於或等於標準窗口大小。 – 2009-09-27 05:28:52

+0

@freddy:這是25 MB左右的位圖,這對你的目的來說可能很好。我在.Net Compact Framework中做了很多工作,其中一個大的位圖會是災難性的。 – MusiGenesis 2009-09-27 20:27:22