【问题标题】:Draw Image to Picture Box using AutoScroll but keep a Header Visible使用 AutoScroll 将图像绘制到图片框但保持标题可见
【发布时间】:2015-12-21 20:03:14
【问题描述】:

我有一个 Picturebox,我在其中绘制了一个视图(在这种情况下为甘特视图),它工作正常 - 即,视图已绘制并且 AutoScroll 属性允许 PictureBox 中的图像平滑滚动。

我的问题是,当我向下滚动图像时,图像的标题(例如,本例中的日期标题)会从显示屏顶部滚动出来。

我无法解决的是如何将标题固定到顶部。我想过简单地将标题绘制到另一个图片框,但是我不确定如何将标题与主图片框的左右滚动同步

有人可以建议处理此问题的最佳方法,还是我需要恢复为直接绘制并自己处理滚动?

我在 VS 2015 中使用 VB。

非常感谢

菲尔

已更新 - 我现在正在使用屏幕外位图,但有人可以查看下面的代码并让我知道是否有更快/更好的方法来执行此操作吗?这一切都有效,但仍在学习,因此总是希望以最好的方式做事

   Public Sub MoveViewPoint(G As Graphics)
    ' G passed in from controls Paint

    G.Clear(Color.WhiteSmoke)
    ' _Plan is off-screen bitmap of image
    ' _HeaderHeight is height of the Header area in _Plan
    Dim Header_src_rect As New Rectangle(_HScroll.Value, 0, _Plan.Width, _HeaderHeight)
    Dim Header_dst_rect As New Rectangle(0, 0, _Plan.Width, _HeaderHeight)
    G.DrawImage(_Plan, Header_dst_rect, Header_src_rect, GraphicsUnit.Pixel)

    Dim src_rect As New Rectangle(_HScroll.Value, _HeaderHeight + 1 + _VScroll.Value, _Plan.Width, _Plan.Height)
    Dim dst_rect As New Rectangle(0, _HeaderHeight + 1, _Plan.Width, _Plan.Height)
    G.DrawImage(_Plan, dst_rect, src_rect, GraphicsUnit.Pixel)

    _HScroll.LargeChange = G.ClipBounds.Width * 0.9
    _VScroll.LargeChange = G.ClipBounds.Height * 0.9

End Sub

【问题讨论】:

    标签: vb.net picturebox autoscroll


    【解决方案1】:

    我会使用 GDI 图形系统在屏幕外位图上进行所有绘图。您可以在同一个位图中将标题和图表的其余部分绘制为 2 个不同的阶段。您必须通过观察 MouseMove 事件并检查按钮状态来自己处理滚动。

    【讨论】:

    • OK 是有道理的。所以我已经这样做了,但是有人可以查看添加到原始问题的代码并让我知道是否有更快/更好的方法来做到这一点?一切正常,但仍在学习,因此总是希望以最好的方式做事
    • 我看不出您在那里所做的任何重大问题,但在绘制期间更新控件属性有点不寻常。据我所知,它不应该真的给你带来任何问题。
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多