C# 如何使PictureBox在设计器中调整时填充用户控件

C# 如何使PictureBox在设计器中调整时填充用户控件,c#,.net,winforms,user-controls,picturebox,C#,.net,Winforms,User Controls,Picturebox,技术:.NET4,C#,WinForms,VisualStudio2010 我在调整自定义UserControl的大小时遇到了一个问题。客户UserControl仅包含一个PictureBox,其属性设置为在必要时显示滚动条 UserControl设置了以下属性: 自动缩放模式:字体 自动滚动:对 双缓冲:真 最小尺寸:100100 尺码:250250 PictureBox设置了以下属性: 锚:左上角 地点:0,0 尺码:250250 侧模式:自动调整大小 在自定义控件的设计器视图中,P

技术:.NET4,C#,WinForms,VisualStudio2010

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

UserControl
设置了以下属性:

  • 自动缩放模式:字体
  • 自动滚动:对
  • 双缓冲:真
  • 最小尺寸:100100
  • 尺码:250250
PictureBox
设置了以下属性:

  • 锚:左上角
  • 地点:0,0
  • 尺码:250250
  • 侧模式:自动调整大小
在自定义控件的设计器视图中,
PictureBox
填充整个控件。但是,在主应用程序的设计器视图中,自定义的
UserControl
最初是250 x 250,就像它的设计器显示的那样,但是当我调整它的大小以适应主应用程序时,只有
UserControl
面板的大小被调整,将
PictureBox
保留为原来的250 x 250。我公开的属性之一是鼠标光标X,Y在
图片框中的位置,当没有加载图像时,该属性在250 X 250区域外不返回任何内容

我试过:

  • 将锚点属性设置为Top、Left、Right、Bottom,但这会导致
    UserControl
    不显示滚动条
  • PictureBox
    的Dock属性设置为填充,但这也会导致
    UserControl
    不显示滚动条

如何使
PictureBox
始终为
UserControl
的全尺寸,即使在设计器中进行调整?

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

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

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

(将其置于用户控件中)

当您更改
PictureBox
Image
时,也可以调用
maintaintpictureboxsize
方法
其效果是,当图片框中显示的图像的宽度或高度小于用户控件时,图片框将扩展以填充用户控件,如果不是,图片框的大小就是图像的大小,因此会显示滚动条。

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

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

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

(将其置于用户控件中)

当您更改
PictureBox
Image
时,也可以调用
maintaintpictureboxsize
方法
这样做的效果是,当图片框中显示的图像的宽度或高度小于用户控件时,图片框将扩展以填充用户控件,如果不是,图片框的大小就是图像的大小,因此会显示滚动条。

如果PictureBox填充用户控件,为什么需要显示滚动条?是,我明白这是怎么回事了。在主应用程序中,PictureBox通常比UserControl大,因此会有滚动条。我的问题是,当主应用程序启动时,PictureBox的大小就是它在设计器中创建的大小,而不管UserControl当前的大小如何。它不再按需要填充用户控件。您已将图片框的
SizeMode
属性设置为
AutoSize
,因此当您在图片框的
image
属性中设置图像时,图片框应自行调整大小以匹配图像的大小。您是否设置了
Image
属性?当我将
PictureBox
设置为大于
UserControl
的图像时,它会正常工作。我试图解决当
UserControl
第一次加载并且大小未知时,
PictureBox
仍然是我在设计器中设置的大小。如果PictureBox填充了UserControl,为什么需要显示滚动条?是的,我可以看出这一点不清楚。在主应用程序中,PictureBox通常比UserControl大,因此会有滚动条。我的问题是,当主应用程序启动时,PictureBox的大小就是它在设计器中创建的大小,而不管UserControl当前的大小如何。它不再按需要填充用户控件。您已将图片框的
SizeMode
属性设置为
AutoSize
,因此当您在图片框的
image
属性中设置图像时,图片框应自行调整大小以匹配图像的大小。您是否设置了
Image
属性?当我将
PictureBox
设置为大于
UserControl
的图像时,它会正常工作。我试图解决
UserControl    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);
        }
    }