我在这里有点新意,但我会尽可能清楚地解释我的问题。
我在带有垂直和水平滚动条的表格上放置红点,如果我在(50,590)
处放置一个点并向右滚动,则点“跟随”该运动。
我仍然无法发布图片,但我可以将链接发布给他们,第一张图片是原始位置的点,第二张图片是我滚动到右边后的点 dot original position, dot 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 :(得分:0)
有一个名为“拖动时显示窗口内容”的内置Windows设置,默认情况下在所有现代版本的Windows上都会打开。这样做是使Windows在滚动时自动移动具有滚动条的窗口的内容。并且只为窗口中以前不可见的部分生成绘制请求。
这就是让你的位图正在移动的外观的原因。您需要通过强制重新绘制整个窗口来修复它,而不仅仅是它的一部分。将此代码粘贴到表单类中:
protected override void OnScroll(ScrollEventArgs se) {
base.OnScroll(se);
this.Invalidate(false);
}
这将解决您的问题,您的位图现在重新绘制在相同的位置。但是,不是没有从Windows设置中看到工件,只需一瞬间,您将在滚动位置看到位图。视觉效果类似于看到你的位图做pogo。没有解决办法,双缓冲无法修复它,你无法合理地关闭该设置。
顺便说一下,修复代码中的错误,你应该不处理图形对象。你没有创建它。当你开始修补双缓冲时,这将在将来引起麻烦。删除该声明。