【问题标题】:Make a picturebox scroll dynamically使图片框动态滚动
【发布时间】:2018-11-22 11:26:54
【问题描述】:

我在这里看到了一些答案,但没有找到适合我的问题的答案。

我有一个图片框,我在上面动态地绘制了一些矩形(例如:Change color of graphic rectangle dynamically)。

现在,如果我画了很多矩形,那么图片框不够大,我看不到所有矩形......所以我需要让图片框可滚动。

这怎么可能?

注意:我没有 Panel,只有一个 PictureBox,我通过代码动态填充。

【问题讨论】:

  • 为什么是PictureBox?您可以在任何Control 中绘制。这里你需要一个ScrollableControl 派生类。
  • @IvanStoev 因为当鼠标悬停在图片框上并重绘矩形时,我也在遍历所有矩形(你可以在我写的网址中看到),如果我不使用图片框当鼠标悬停在控件上时,我会得到一个类似 filckr 的错误。
  • PictureBox 是为了简化显示图像。同样,您可以在 any Control. 中使用或不闪烁进行绘制
  • 不正确。他将不得不对每个控件进行子类化以包括双缓冲。当然,这没什么大不了的。但是在自动滚动面板中嵌套一个 PBox 就可以了。他需要做的就是在必要时放大 th PBox.. 另外:Autscrolling 仅用于显示嵌套控件,而不用于显示您绘制的图形,因此嵌套是必要的。
  • @TaW 这听起来更像是 VB6 的解决方案,但当然是一种选择 :)

标签: c# winforms scroll graphics picturebox


【解决方案1】:

您应该将PictureBox 放在Panel 中,并加上AutoScroll=true

然后您可以根据需要简单地将PictureBox 放大,甚至可以在创建DrawRectangles 的位置...:

public DrawRectangle(Rectangle r, Color c, float w, Control ct)
{
    color = c;
    width = w;
    rect = r;
    surface = ct;

    if ((r.Right > surface.Width)  ||  (r.Bottom > surface.Height))
    {
        surface.Size = new Size(Math.Max(surface.Width, r.Right),
                                Math.Max(surface.Height, r.Bottom)) ;
    }
}

【讨论】:

  • 非常感谢!再一次,你为我节省了很多时间!
  • 很高兴听到它也对您有用。事情进展如何? – 另外:如果有帮助,请不要忘记接受答案..
  • 不管我们在 cmets 中的小“学术”讨论如何,这绝对值得一票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2016-02-06
  • 1970-01-01
  • 2010-12-22
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多