锁定控制到屏幕位置

时间:2016-06-13 06:08:39

标签: c# winforms

我有一个带有Dock = Filled图片框控件的表单。当我调整表单的底部或右侧边缘时,可见图片的数量会增加或减少,但图片的屏幕空间坐标保持不变。但是,当我调整表单的顶部或左侧边缘时,图片的图像会移动,使其左上边缘与表单的左上边缘匹配。

也就是说,当我调整表单的左边或上边缘时,图片会移动。这种行为对很多情况都有意义,我理解为什么它是默认情况,但对于我的情况我更喜欢它是否像图像的屏幕空间坐标所在的底边和右边一样工作当表单调整大小时,它会被修复,只会显示出更多或更少的内容。

在图片中,这是原始形式:

Original form

这是通过拖动右下角调整大小的时间:

bottom right dragged form

当你拖动左上角时它也是这样的,但在这种情况下,它会拖动图片,所以图片的左上角是总是与表格的左上角齐平。但我觉得它看起来像这个样机而是:

desired behavior mock up

因此图片基本上是“固定的”#34;在屏幕空间中调整表单大小只会显示出更多或更少的内容。

我试过这样的事情:

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);
    }
}

但不出所料,结果似乎并不合适(图像的屏幕空间坐标仍然漂移)并且它远非光滑。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

请勿使用Dock属性。而是将PictureBox放在表单上并根据需要调整大小。然后将其Anchor设置为None

答案 1 :(得分:0)

只需设置位置(0,0)并将控件停靠在左侧,顶部:

pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
pictureBox1.Location = new System.Drawing.Point(0, 0);

并且不要更改Form1_Resize事件中的位置。