2012-01-18 55 views
0

我有一個從System.Windows.Forms.UserControl派生的控件,它放置在一個自定義的網格中。當網格的第一列被凍結並且網格滾動幾個像素時,第二列變得部分可見,使得該列中的控件也變得部分可見。如何通過隱藏裁剪顯示控件的一部分?

爲了實現這一點,我希望能夠只顯示通過隱藏/剪裁控件的左側部分可見的控件部分。

我不想修改控件的OnPaint,因爲我沒有訪問控件的代碼。我可以更改顯示控件的網格中的代碼。

我嘗試了以下不起作用的: 1.使只有必須可見的部分控件無效。 2.使用的GraphicsPath如下:

System.Drawing.Drawing2D.GraphicsPath controlPath = new System.Drawing.Drawing2D.GraphicsPath(); 
controlPath.AddRectangle(visibleRect); 
editControl.Region = new Region(controlPath); 

任何其他的想法?

+1

您必須截取控件的繪製,以便可以修改Graphics.Clip。派生自己的類並重寫OnPaintBackground和OnPaint。如果這是一個包含其他控件的UserControl,則不起作用。 – 2012-01-18 05:34:17

+0

感謝您的建議。但在我的情況下,我有很多類型的控件可以放置在網格中,因此從現有控件中爲所有控件導出新的控件將是不可行的。 – 2012-01-23 07:37:18

回答

0

我得到這個工作液:

使用的GraphicsPath工作。我沒有正確設置剪輯矩形,因此我無法看到剪輯發生。我不必將剪輯區域wrt的xOffset設置爲網格,而必須將剪輯區域wrt設置爲控件。 窗口區域是操作系統允許繪製的窗口內的像素集合。操作系統不顯示位於窗口區域之外的窗口的任何部分。控件區域的座標相對於控件的左上角,而不是控件的客戶區域(http://msdn.microsoft.com/en-us/library/ddhy6052(vs.71).aspx