【问题标题】:How to have a scrolling panel with a picturebox inside?如何有一个带有图片框的滚动面板?
【发布时间】:2012-06-16 07:23:47
【问题描述】:

我有一个固定在 Windows 窗体的顶部、左侧、右侧、底部的面板。在那个面板里面是一个图片框。该图片框通过 TrackBar 控件(位于同一窗体的另一个面板上,“Dock”属性设置为 Top)上下调整大小,并在每次调整大小时重新居中。图片框有时会变得太宽或太高,以至于面板无法容纳它。如何向面板添加水平和垂直滚动条以允许它“平移”图片框中的图像?我尝试过使用 autoscroll 属性,但我似乎无法让它做任何事情,而且 MSDN 文档有些模糊并列出了一些错误。我已经在堆栈上查看了以前的问题,但找不到任何适合我情况的东西。有什么想法吗?

我正在使用 Visual Studio 2010 和一个 VB.NET 项目,但 VB.NET 或 C# 建议会很棒。

提前致谢!

【问题讨论】:

  • Scrolling PictureBox in .NET? 的可能重复项
  • 我尝试了那个解决方案。它对我不起作用。
  • 为什么不呢?请解释一下。
  • 我应该说它不能满足我的需要。可滚动图片框本身效果很好,可能是我将来会使用的控件。但是我正在增加/减小图片框(在面板上)的大小以获得缩放效果,并且如果图片框变得太宽或太高,我需要一种滚动面板的方法。

标签: .net winforms scroll


【解决方案1】:

这种类型的操作没有单一的设置,因为当 PictureBox 尺寸小于 Panel 的客户空间时,您希望 PictureBox 居中,但当 PictureBox 尺寸超过 Panel 的客户空间大小时,您希望位置位于零点并让滚动条处理视图。

尝试处理面板的调整大小事件,并在调整图片框大小时调用该事件:

Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
  PictureBox1.Size = New Size(64 * TrackBar1.Value, 64 * TrackBar1.Value)
  Panel1.AutoScrollMinSize = PictureBox1.Size
  Panel1_Resize(Panel1, EventArgs.Empty)
End Sub

Private Sub Panel1_Resize(sender As Object, e As EventArgs) Handles Panel1.Resize
  If PictureBox1.Width > Panel1.ClientSize.Width Then
    PictureBox1.Left = Panel1.AutoScrollPosition.X
  Else
    PictureBox1.Left = Panel1.ClientSize.Width / 2 - PictureBox1.Width / 2
  End If

  If PictureBox1.Height > Panel1.ClientSize.Height Then
    PictureBox1.Top = Panel1.AutoScrollPosition.Y
  Else
    PictureBox1.Top = Panel1.ClientSize.Height / 2 - PictureBox1.Height / 2
  End If
End Sub

【讨论】:

  • 这就是我想要的。我不确定如何使用 AutoScrollMinSize 和 AutoScrollPosition 属性。谢谢。
猜你喜欢
  • 2010-12-22
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2019-12-06
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多