2013-05-11 63 views
2

我在顯示太大而無法在一個面板上看到的圖表時遇到問題。 我必須滾動條,它應該改變圖表上的視角,但是當我想滾動圖片時,形狀在不同的位置上移動,所有東西都被壓扁。c#在面板上繪圖並滾動結果

它看起來像這樣here link 當我告訴它,像這樣here link當我嘗試看看上圖

它看起來像應用程序每次繪製形狀,當我滾動面板的底部,當我走在圖片的底部仍然是(0,0)沒有(0,500)

我有算法,其中提供面板上的位置的值和對象的nr id陣列,然後我有繪製它的循環,從字典中獲取有關對象的信息以及從數組中獲得的位置。

如何解決這個問題? THX的任何建議的

編輯 我不想畫它再次我要畫一個大圖,這樣的事情(在評論鏈接),但我知道,用戶可以使例如50個對象(形狀)並且在小面板上不能看到那種大圖形,所以我們必須有機會滾動並查看grapf的底部,左側或他想要的這一側。

我會嘗試提供有關應用程序的更多細節。 當你午餐時,你會看到控制面板(form1),在這裏你添加事件/功能/異或/或者這個選項的每一個在圖形上都有自己的形狀。 因此,用戶添加例如事件與文本,按下按鈕添加創建對象,並將其添加到集合。他可以添加事件/功能,XOR /或儘可能多的他想要的。

好的,當他添加他想要的所有東西時,現在他希望看到圖表,所以他按下「生成圖表」按鈕,現在應用程序正在顯示下一個面板和滾動條。你可以在鏈接中看到窗口。 在該行之後的第二形式

private void panel1_Paint(object sender, PaintEventArgs e){ 

我有算法,該算法是把座標值表,然後forech圈從字典服用(集合):應上顯示

  • 文本在形狀中間的圖,
  • 確定面板上形狀的類型的值。

從數組循環取座標值。

這是如何工作的,當它需要的時候,我也可以把代碼放在這裏。

回答

7

標準的錯誤是忘記按照滾動位置偏移繪圖。用面板的AutoScrollPosition屬性,像這樣:

void panel1_Paint(object sender, PaintEventArgs e) { 
     e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y); 
     e.Graphics.DrawLine(Pens.Black, 0, 0, 300, 2000); 
    } 

Panel控件是一般漂亮胡思亂想畫畫,它被設計爲一個容器控件。您通常也希望它進行雙緩衝,並在調整大小時強制進行重繪。設置DoubleBuffered和ResizeRedraw屬性需要從面板派生your own control

+0

thx這個答案,但我解決了它。我添加滾動條到窗體,而不是面板,它的工作;) – whyworry 2013-05-12 16:58:48

+0

我發佈了我的[問題](http://stackoverflow.com/q/38011034/2185245)。你能幫我嗎? – Abhishek 2016-06-24 10:25:02

0

它看起來像應用程序每次繪製形狀,當我滾動面板

你爲什麼不刪除的繪圖區域,並再次提請形狀?

也許你可以發佈一個代碼片段?

+0

http://upload.wikimedia.org/wikipedia/commons/3/3f/EPC_diagram.png - 這是示例圖 – whyworry 2013-05-12 14:04:33

+0

是啊,我怎麼說它是每次點擊滾動條時繪製的形狀。當我通過滾動條右移約200個單位。左上角應該有座標200,0而不是0,0。 – whyworry 2013-05-12 14:59:13