Изменение размера дочерних элементов управления при изменении размера родительского элемента - PullRequest
2 голосов
/ 29 марта 2011

Я пытаюсь найти простой способ изменить размер моей дочерней формы на основе размера родительской формы. т.е. дочерняя форма выскакивает из родительской формы (FixedToolWindow).

Чтобы сделать это в настоящее время, я достигаю этого, имея событие OnParentResize в моем дочернем классе формы. * 1003 то есть *

void OnParentResized(object sender, EventArgs e)
        {
            //Resize of the form shall be made only when the form is not minimized
            if (parent.WindowState != FormWindowState.Minimized)
            {
                int iWidth = parent.Size.Width;
                int iHeight = parent.Size.Height;

                double dXFactor = (double)iWidth / (double)this.Width;
                double dYFactor = (double)iHeight / (double)this.Height;
                this.Scale(new SizeF((float)dXFactor, (float)dYFactor)); 

            }
        }

Строка this.Scale (новый SizeF ((float) dXFactor, (float) dYFactor)); масштабирует все элементы управления в моей дочерней форме.

Когда я использую это, я предполагаю, что всякий раз, когда изменяется родительская форма, моя дочерняя форма тоже. Видимо, я столкнулся с проблемой здесь, все элементы управления внутри дочерней формы привязаны к верхнему левому углу.

  1. Изначально все элементы управления в моей дочерней форме имеют нормальный размер.

  2. Размер родительской формы изменяется, чтобы она была маленькой, дочерняя форма также уменьшается до такого же фактора.

  3. Теперь я увеличиваю размер родительской формы до ее первоначального размера. Размер элементов управления дочерней формы теперь увеличивается на более высокий коэффициент. А также элементы управления появляются не на своем месте.

Может кто-нибудь предложить лучший подход для таких ситуаций.

Приветствия

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Изменение в родительском элементе От isMdiContainer как true, стиль границы дочерней формы как none, затем

в родительской форме измените код, подобный этому, в вентиляторе, где вы хотите.

 foreach (var mdiChild in MdiChildren)
                mdiChild.Close();
  var childobj= new childform {MdiParent = this, Dock = DockStyle.Fill};
     childobj.Show();

Измените элементы управления наЯкорь собственности.

Надеюсь, что это может помочь вам.

0 голосов
/ 29 марта 2011

Полагаю, вы должны использовать ширину и высоту ClientRectangle вместо ширины и высоты окна. Потому что ваш клиентский прямоугольник меньше вашего прямоугольника Windows. Это первоначальное предположение.

...