如何在设计器中进行调整时使PictureBox填充UserControl

时间:2012-02-22 18:29:13

标签: c# .net winforms user-controls picturebox

技术:.NET 4,C#,WinForms,Visual Studio 2010

在调整自定义UserControl时,我遇到了一个问题。客户UserControl只包含PictureBox,其属性设置为必要时显示滚动条。

UserControl设置了以下属性:

  • AutoScaleMode:字体
  • AutoScroll:True
  • DoubleBuffered:True
  • MinimumSize:100,100
  • 尺寸:250,250

PictureBox设置了以下属性:

  • 主播:上,左
  • 地点:0,0
  • 尺寸:250,250
  • SideMode:AutoSize

在自定义控件的设计器视图中,PictureBox填充了所需的全部内容。但是,在主应用程序的设计器视图中,自定义UserControl最初是250 x 250,就像它的设计者所示,但是当我调整它以适应主应用程序时,只调整UserControl面板的大小将PictureBox留给原点250 x 250.我公开的其中一个属性是PictureBox内的鼠标光标X,Y位置,当没有加载图像时,该属性不返回任何内容。 250 x 250区域。

我试过了:

  • 将Anchor属性设置为Top,Left,Right,Bottom,但这会导致UserControl不显示滚动条。
  • PictureBox的Dock属性设置为fill,但这也导致UserControl不显示滚动条。

即使在设计师中进行调整,我怎样才能使PictureBox始终是UserControl的完整尺寸?

1 个答案:

答案 0 :(得分:1)

您需要在用户控件上使用滚动条,因此当用户控件小于图片中显示的图片时,用户可以滚动查看图片的其他部分,对吗?而且当用户控件大于图片框时,您希望图片框填充用户控件(因此您无法捕获图片框上的鼠标事件)。正确?

首先,您还可以在用户控件上订阅鼠标事件(除了图片框)以执行所需的操作。如果这不适用,您可以这样做:

处理用户控件的Resize事件,并更改图片框的各个方面:

(把它放在你的用户控件中)

    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);

        MaintainPictureBoxSize();
    }

    private void MaintainPictureBoxSize()
    {
        pictureBox1.SizeMode = PictureBoxSizeMode.Normal;

        pictureBox1.Location = new Point();
        pictureBox1.Size = new Size();

        var clientSize = this.ClientSize;

        if (pictureBox1.Image == null)
            pictureBox1.Size = clientSize;
        else
        {
            Size s = pictureBox1.Image.Size;
            pictureBox1.Size = new Size(
                clientSize.Width > s.Width ? clientSize.Width : s.Width,
                clientSize.Height > s.Height ? clientSize.Height : s.Height);
        }
    }

更改MaintainPictureBoxSize的{​​{1}}时,请调用Image方法。
这样做的效果是,当图片框中显示的图像的宽度或高度小于用户控件时,图片框将展开以填充用户控件,如果不是,图片框的大小就是大小图像,所以显示滚动条。