C # winform динамический контроль размеров - PullRequest
1 голос
/ 04 июля 2011

Я хочу, чтобы элементы управления моего приложения winform находились в определенном месте и определенном размере, независимо от того, какое разрешение экрана использует пользователь.

Может ли кто-нибудь дать мне быстрый пример того, как сделать так, чтобы панель начиналась с 60% вниз по экрану до 100% вниз по экрану и была бы полной длины экрана?

Надеюсь, это имело смысл, поэтому, независимо от разрешения экрана, панель будет занимать 40% winform, начиная с приложения на 60%.

Спасибо!

Я хочу, чтобы один и тот же% не имел значения, если бы разрешение было 800X600 или 1024X760.

Ответы [ 3 ]

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

Чтобы оставить форму того же размера (в пикселях), что и для ее дизайна, установите для свойства AutoSize значение false, для свойства AutoScaleMode - значение «Нет» и используйте один из «фиксированных» параметров в FormBorderStyle. Это должно подавить все попытки системы или пользователя изменить размер формы. Это означает, что он будет одинакового размера (в пикселях), но может показаться больше или меньше на разных разрешениях экрана.

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

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

Вы можете использовать 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));
}
0 голосов
/ 04 июля 2011

Вы можете использовать статический класс с именем Screen, который находится в System.Windows.Forms. Просто установите ширину и высоту панели следующим образом:

panel.Height = Screen.PrimaryScreen.WorkingArea.Height;
panel.Width = Screen.PrimaryScreen.WorkingArea.Width * 40 / 100;

и вы можете установить верхнюю часть панели, используя свойства этого объекта. Но я должен заметить, что если ваша панель находится в другой форме, свойства Top & Left ее, очевидно, относительно содержания формы.

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