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

C# 如何按比例设置另一个控件的位置,c#,winforms,point,C#,Winforms,Point,我的问题是:我有两个面板(panel1,panel2),其中panel1.Size=新尺寸(200200)和Panel2.Size=新尺寸(600600)其中两个面板都位于CustomControl中,可以拖动并更改其位置(szbControl1、szbControl2) 我的问题是,如何根据szbControl1.Location正确(按比例)设置szbControl2.Location,其中szbControl1父项是panel1,而szbControl2父项是panel2,比如,如果我移动

我的问题是:我有两个面板(panel1,panel2),其中
panel1.Size=新尺寸(200200)
Panel2.Size=新尺寸(600600)其中两个面板都位于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);
        }

类似于使用百分比,但它不起作用。

您提供的代码没有考虑SZBC控件的大小。(位置/尺寸差异)的比率应相等

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

您提供的代码没有考虑SZBC控件的大小。(位置/尺寸差异)的比率应相等

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