Вы можете использовать SplitContainer , который делит форму на две области.Если вы измените его ориентацию на горизонтальную, вы получите 2 области, одна из которых начинается сверху экрана, а вторая - с другой стороны.Теперь вы можете определить минимальные размеры каждой панели:
SplitContainer.Panel1MinSize = Convert.ToInt32(0.6 * Form.ActiveForm.ClientSize.Height);
SplitContainer.Panel2MinSize = Convert.ToInt32(0.4 * Form.ActiveForm.ClientSize.Height);
. Таким образом, верхняя панель занимает 60% клиентской области, а нижняя - 40%.Он автоматически запустится на 60% ниже.Затем вы можете поместить любой другой элемент управления на панель и закрепить его на панели, используя Control.Dock = DockStyle.(something)
Другой способ изменить положение любого элемента управления - это в основном вычислить его положение и размер.Вы можете получить ширину клиентской области как Form.ClientSize.Width
и начальную позицию X, Y на 60% вниз в приложении как:
int X = 0; // Leftmost
int Y = Convert.ToInt32(0.6 * Form.ClientSize.Height); // 60% from topmost point
Теперь вы можете установитьразмер и положение элемента управления:
Control.Size = new Size(Form.ClientSize.Width, Convert.ToInt32(0.4 * Form.ClientSize.Height));
Control.Location = new Point(0, Convert.ToInt32(0.6 * Form.ClientSize.Height);
Так что если вы хотите заставить , например, label1
в Form1
вести себя так, как вы написали в своем посте, одна из возможностей будетбудь таким:
private void Form1_Resize(object sender, EventArgs e)
{
label1.Size = new Size(this.ClientSize.Width, Convert.ToInt32(0.4 * this.ClientSize.Height));
label1.Location = new Point(0, Convert.ToInt32(0.6 * this.ClientSize.Height));
}