2012-09-04 56 views
-1

我寫了一個C#應用程序來繪製矢量圖元。對於繪製表面,我使用放置在TabControl中的Draw.DoubleBufferedPanel。當我創建新項目時,新建了一個帶有新Draw.DoubleBufferedPanel的標籤頁。但是,在用於拖拽的按鈕的點擊事件中,我使用了主要的Draw.DoubleBufferedPanel,當我創建新的選項卡時,我無法在其中繪製任何內容。爲了吸引新創建的項目,我必須做些什麼?如何在運行時創建DoubleBufferedPanel

+2

備註:您需要在繪圖處理程序中繪製。 – SLaks

+0

我知道。我爲新的DoubleBufferedPanel添加了繪製處理程序,但它不起作用。我只能在我用設計師創建的主標籤中繪製。我的問題是如果我創建5個不同的選項卡並且我想在其中的任何選項卡中繪製,該怎麼辦? –

+0

顯示您的繪圖代碼的最小表示 - 具體顯示如何引用您繪製的面板。 –

回答

0

確保您的控制層次是正確的:

  • 的MainForm
    • 的TabControl
    • TabPage1
      • MyDrawingControl1:MyDrawControl
    • TabPage2
      • MyDrawingControl2:MyDrawControl

然後在MyDrawControl的油漆處理程序(而不是它的實例),你需要通過翻閱剪取完整繪製到只有自己的表面(平面)。

更新:

關於如何實現做一些自定義的圖紙可以發現here控制信息。一般來說,您必須編寫自己的類,並從控件(或其後代之一,如Button)繼承並實現OnPaint()方法。在OnPaint()中,您可以使用Graphic來繪製。該控件可以設置爲DoubleBuffered = true,以便Winforms自動在您的OnPaint()代碼周圍應用雙緩衝。

+0

是的,我知道。但如何做到這一點?我的繪製處理程序代碼是:Draw.DoubleBufferedPanel NewDrawArea = sender作爲Draw.DoubleBufferedPanel; eHandler.MouseDown(e.Location); NewDrawArea.Invalidate(); –

+0

你有沒有像上面的「MyDrawControl」一樣編寫自己的控件(類),並將其放置在每個Tab頁面中?你可以發佈一些代碼,以便我們看到你現在做了嗎? – Marc