Настроить элементы управления для соответствия размеров формы в Visual Studio C# 2019? - PullRequest
0 голосов
/ 01 мая 2020

Обычно, когда я уменьшаю свою форму, она просто закрывает вещи. Как мне сделать так, чтобы содержимое корректировало положение при изменении размера формы?

Единственные ответы на этот вопрос от 9-10 лет go и относятся к свойствам, которые я не могу найти.

Редактировать: я думаю, что я не могу использовать winforms, конкретный c тип проекта "Windows Forms App (. NET Framework), это не winforms?

1 Ответ

0 голосов
/ 04 мая 2020

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

public partial class Form1 : Form
    {

        AutoSizeFormClass asc = new AutoSizeFormClass();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            asc.controllInitializeSize(this);
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            asc.controlAutoSize(this);
        }
    }
    class AutoSizeFormClass
    {  
        public struct controlRect
        {
            public int Left;
            public int Top;
            public int Width;
            public int Height;
        }
        public List<controlRect> oldCtrl;
        public void controllInitializeSize(Form mForm)
        {
                oldCtrl = new List<controlRect>();
                controlRect cR;
                cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;
                oldCtrl.Add(cR);
                foreach (Control c in mForm.Controls)
                {
                    controlRect objCtrl;
                    objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height;
                    oldCtrl.Add(objCtrl);
                }

        }
        public void controlAutoSize(Form mForm)
        { 
            float wScale = (float)mForm.Width / (float)oldCtrl[0].Width; 
            float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;
            int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
            int ctrlNo = 1;
            foreach (Control c in mForm.Controls)
            {
                ctrLeft0 = oldCtrl[ctrlNo].Left;
                ctrTop0 = oldCtrl[ctrlNo].Top;
                ctrWidth0 = oldCtrl[ctrlNo].Width;
                ctrHeight0 = oldCtrl[ctrlNo].Height;
                c.Left = (int)((ctrLeft0) * wScale);
                c.Top = (int)((ctrTop0) * hScale); 

                ctrlNo += 1;
            }
        }

    }

Проверенный результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...