如何按比例设置另一个控件的位置



我的问题是:我有2个面板(panel1,panel2),其中panel1.Size = new Size(200, 200);Panel2.Size = new Size(600, 600);,其中两个面板都有一个CustomControl,可以拖动和改变它的位置(szbControl1,szbControl2)。

我的问题是,我如何才能根据szbControl1.Location正确(按比例)设置szbControl2.Location,其中szbControl1父级是panel1, szbControl2父级是panel2,就像我在底部移动szbControl1一样,szbControl2也应该在底部。到目前为止,我尝试了这个:

private void sizeAbleCTR2_LocationChanged(object sender, EventArgs e)
        {
            int smallX = (sizeAbleCTR2.Location.X * panel1.Size.Width) / 100;
            int smallY = (sizeAbleCTR2.Location.Y * panel1.Size.Height) / 100;
            int largeX = (smallX * panel2.Width) / 100;
            int largeY = (smallY * panel2.Height) / 100;
            sizeAbleCTR1.Location = new Point(largeX,largeY);
        }

喜欢使用百分比,但它不起作用

您提供的代码没有考虑到szbControls的大小。(位置/大小之差)的比例应该相等。

private void sizeAbleCTR2_LocationChanged(object sender, EventArgs e)
{
    float srcHeightDiff = panel2.Height - sizeAbleCTR2.Height;
    float dstHeightDiff = panel1.Height - sizeAbleCTR1.Height;
    int locY = (int)(dstHeightDiff * (sizeAbleCTR2.Location.Y / srcHeightDiff));
    float srcWidthDiff = panel2.Width - sizeAbleCTR2.Width;
    float dstWidthDiff = panel1.Width - sizeAbleCTR1.Width;
    int locX = (float)(dstWidthDiff * (sizeAbleCTR2.Location.X / srcWidthDiff));
    sizeAbleCTR1.Location = new Point(locX, locY);
}

最新更新