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



我对这里有点陌生,但我会尽可能清楚地解释我的问题。我在带有垂直和水平滚动条的表单上放置红点,如果我在(50,590)处放置一个点并向右滚动,则该点"跟随"移动。

我仍然无法发布图像,但我可以发布它们的链接,第一张图片是原始位置的点,第二张图片是我向右滚动后的点点原始位置,滚动后的点

当我滚动时,我想让这些点保持原来的位置,实际上我无法理解,因为它们还没有这样做

这是代码

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);
}

你能帮我解决这个问题吗?

有一个名为"拖动时显示窗口内容"的内置Windows设置,它在所有现代版本的Windows上都是默认打开的。这样做的目的是让Windows在滚动时自动移动带有滚动条的窗口的内容。并且仅为以前不可见的窗口部分生成绘制请求。

这就是为什么看起来像位图在移动。你需要通过强制重新绘制整个窗口来修复它,而不仅仅是部分窗口

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

这将解决您的问题,您的位图现在重新绘制在相同的位置。然而,如果不从Windows设置中看到工件,您会在滚动位置看到位图。视觉效果类似于看到位图执行pogo。没有解决办法,双缓冲无法解决,您也无法合理地关闭该设置。

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

最新更新