当我使用滚动条时,表单上的图形会移动

时间:2012-12-17 10:47:34

标签: c# forms scrollbar point

我在这里有点新意,但我会尽可能清楚地解释我的问题。 我在带有垂直和水平滚动条的表格上放置红点,如果我在(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);
}
你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

有一个名为“拖动时显示窗口内容”的内置Windows设置,默认情况下在所有现代版本的Windows上都会打开。这样做是使Windows在滚动时自动移动具有滚动条的窗口的内容。并且只为窗口中以前不可见的部分生成绘制请求。

这就是让你的位图正在移动的外观的原因。您需要通过强制重新绘制整个窗口来修复它,而不仅仅是它的一部分。将此代码粘贴到表单类中:

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

这将解决您的问题,您的位图现在重新绘制在相同的位置。但是,不是没有从Windows设置中看到工件,只需一瞬间,您将在滚动位置看到位图。视觉效果类似于看到你的位图做pogo。没有解决办法,双缓冲无法修复它,你无法合理地关闭该设置。

顺便说一下,修复代码中的错误,你应该处理图形对象。你没有创建它。当你开始修补双缓冲时,这将在将来引起麻烦。删除该声明。