2012-12-17 14 views
0

我在這裏有點新,但我會盡可能清楚地解釋我的問題。 如果我在(50,590)上放置一個點並向右滾動該點「跟隨」移動,我將在一個帶有垂直和水平滾動條的窗體上放置紅色圓點。當我使用滾動條時,表單上的圖形會移動

我仍然無法張貼圖片,但我可以張貼鏈接到他們的第一張照片是在原來的位置點,第二張照片是點後,我向右滾動 dot original positiondot after scrolling

我想要點滾動時保持原來的位置,實際上我不明白他們還沒有做到這一點。

這是代碼

Bitmap MyBitmap = new Bitmap(3000,3000); 

Graphics MyGraphicObject; 

Brush red = new SolidBrush(Color.Red); 

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    MyGraphicObject = e.Graphics; 
    MyGraphicObject.DrawImage(MyBitmap, 0, 0, MyBitmap.Width, MyBitmap.Height); 
    MyGraphicObject.Dispose(); 
} 

private void Form1_MouseClick(object sender, MouseEventArgs e) 
{ 
    MyGraphicObject = Graphics.FromImage(MyBitmap); 
    MyGraphicObject.FillRectangle(red, e.X-2, e.Y-2, 4, 4); 
} 

可以請你幫我解決這個問題?

+0

你正在繪製成一個圖片框或形式?表單在重新繪製afaik時遇到問題,請嘗試將另一個窗口再次拖到窗體上並再次移開,這是否可以解決問題? – efkah

+0

感謝您的評論,我直接繪製到表單中。在窗體上移動窗口並沒有幫助,因爲我的圖形是持久的。 – user1909612

回答

0

有一個名爲「在拖動時顯示窗口內容」的內置Windows設置,默認情況下它在所有現代版本的Windows上都處於打開狀態。所做的就是讓Windows在滾動時自動移動具有滾動條的窗口的內容。並且僅爲之前不可見的部分窗口生成繪畫請求。

這是什麼使它看起來就像你的位圖正在移動。您需要通過強制整個窗口被重新繪製來修復它,而不僅僅是它的一部分。這段代碼粘貼到你的窗體類:

protected override void OnScroll(ScrollEventArgs se) { 
     base.OnScroll(se); 
     this.Invalidate(false); 
    } 

這將解決您的問題,您的位圖現在重畫在同一位置。但是,並非沒有從Windows設置中看到工件,一秒鐘之後,您將在滾動位置看到位圖。視覺效果與查看您的位圖執行pogo相似。沒有解決這個問題,雙緩衝無法解決它,你不能合理地關閉該設置。

順便說一句,修正你的代碼中的bug,你應該而不是配置圖形對象。你沒有創建它。當你開始修改雙緩衝時,這將在未來造成麻煩。刪除該語句。

+0

非常感謝,你的建議解決了我的問題! – user1909612

相關問題