技术:.NET 4,C#,WinForms,Visual Studio 2010
在调整自定义UserControl
时,我遇到了一个问题。客户UserControl
只包含PictureBox
,其属性设置为必要时显示滚动条。
UserControl
设置了以下属性:
PictureBox
设置了以下属性:
在自定义控件的设计器视图中,PictureBox
填充了所需的全部内容。但是,在主应用程序的设计器视图中,自定义UserControl
最初是250 x 250,就像它的设计者所示,但是当我调整它以适应主应用程序时,只调整UserControl
面板的大小将PictureBox
留给原点250 x 250.我公开的其中一个属性是PictureBox
内的鼠标光标X,Y位置,当没有加载图像时,该属性不返回任何内容。 250 x 250区域。
我试过了:
UserControl
不显示滚动条。PictureBox
的Dock属性设置为fill,但这也导致UserControl
不显示滚动条。 即使在设计师中进行调整,我怎样才能使PictureBox
始终是UserControl
的完整尺寸?
答案 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
方法。
这样做的效果是,当图片框中显示的图像的宽度或高度小于用户控件时,图片框将展开以填充用户控件,如果不是,图片框的大小就是大小图像,所以显示滚动条。