【发布时间】:2016-06-13 06:08:38
【问题描述】:
我有一个带有 Dock = Filled 图片框控件的表单。当我调整窗体的底部或右侧边缘的大小时,可见图片的数量会增加或减少,但图片的屏幕空间坐标保持不变。但是,当我调整表单的上边缘或左边缘的大小时,图片的图像会移动,使其左上边缘与表单的左上边缘匹配。
也就是说,当我调整窗体的左边缘或上边缘的大小时,图片会移动。这种行为在很多情况下都是有意义的,我理解为什么它是默认值,但对于我的情况,我更喜欢它像底部和右边缘那样工作,图像的屏幕空间坐标保持固定并且或多或少调整表格大小时会显示其中的一部分。
在图片中,这是原始形式:
这是通过拖动右下角调整大小的时候:
这也是你拖动左上角时的样子,但在这种情况下,它有点像拖动图片一样,所以图片的左上角总是与表单的左上角齐平。但我宁愿它看起来像这个模型:
因此图片在屏幕空间中基本上是“固定的”,调整表单大小只会或多或少地显示出来。
我尝试过这样的事情:
public partial class Form1 : Form
{
Point originalScreenSpace;
public Form1()
{
InitializeComponent();
Shown += Form1_Shown;
Resize += Form1_Resize;
}
void Form1_Shown(object sender, EventArgs e)
{
originalScreenSpace = PointToScreen(pictureBox1.Location);
}
private void Form1_Resize(object sender, EventArgs e)
{
var newLoc = PointToScreen(pictureBox1.Location);
var deltaX = newLoc.X - originalScreenSpace.X;
var deltaY = newLoc.Y - originalScreenSpace.Y;
pictureBox1.Location = new Point(-deltaX, -deltaY);
}
}
但不出所料,结果似乎不太正确(图像的屏幕空间坐标仍然漂移)并且远非平滑。有什么想法吗?
【问题讨论】: