Как пропорционально установить местоположение другого элемента управления - PullRequest
0 голосов
/ 28 октября 2011

Моя проблема: у меня есть 2 панели (panel1, panel2), где panel1.Size = new Size(200, 200); и Panel2.Size = new Size(600, 600);, где обе панели находятся в CustomControl, который может перетаскивать и изменять его.

Мой вопрос: как правильно установить szbControl2.Location (пропорционально) на основе szbControl1.Location, где szbControl1 parent - panel1 и szbControl2 parent - 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);
        }

нравится использовать процент, но он не работает.

1 Ответ

3 голосов
/ 28 октября 2011

Код, который вы указали, не учитывает размер 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);
}
...