Как изменить размер формы, чтобы она соответствовала ее контенту?
Я пытаюсь реализовать следующее поведение:
В форме есть tabcontrol. В этом tabcontrol есть древовидная структура. Чтобы предотвратить появление полос прокрутки, я хотел бы, чтобы форма изменила свой размер в соответствии с содержимым дерева, когда отображается впервые.
Если в дереве указано слишком много узлов, которые будут отображаться по умолчанию для формы, форма должна изменить его размер, чтобы в дереве не было вертикальной полосы прокрутки (до максимального размера, разрешенного размером экрана).
Мне нужно знать, если это можно добиться с помощью свойств элементов управления. Я уверен, что это может быть достигнуто путем вычисления и настройки размеров элементов программно, но я хотел бы знать, есть ли способ достичь этого с помощью таких параметров, как AutoSizeMode и т.д.
[ОБНОВЛЕНИЕ]
Это первый диалог, который видит пользователь моего приложения: это диалог для выбора базы данных для работы. Это список баз данных с tabcontrol, buttens и т.д. Если список слишком длинный, появляются полосы прокрутки, и мой коллега хочет, чтобы они исчезли.
Ответы
Ответ 1
Используйте свойства AutoSize и AutoSizeMode.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.autosize.aspx
Пример:
private void Form1_Load(object sender, EventArgs e)
{
// no smaller than design time size
this.MinimumSize = new System.Drawing.Size(this.Width, this.Height);
// no larger than screen size
this.MaximumSize = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, (int)System.Windows.SystemParameters.PrimaryScreenHeight);
this.AutoSize = true;
this.AutoSizeMode = AutoSizeMode.GrowAndShrink;
// rest of your code here...
}
Ответ 2
Используя различные свойства калибровки (Dock, Anchor) или элементы управления контейнером (Panel, TableLayoutPanel, FlowLayoutPanel и т.д.), вы можете определять размер только от внешнего управления до внутренних элементов управления. Но в рамках .Net нет ничего (работающего), которое позволяет диктовать размер контейнера по размеру дочернего элемента управления. Я также пропустил это несколько раз и попробовал свойство AutoSize, но он никогда не работал.
Итак, все, что вы можете сделать, это попытаться сделать это вручную, извините.
Ответ 3
От MSDN:
Чтобы максимизировать производительность, конструктор Windows Forms AutoSize
для класса Form
. Время разработки, форма ведет себя так, как будто для свойства AutoSize
установлено значение false, независимо от его фактической настройки. Во время выполнения никаких специальных размещение, а свойство AutoSize
применяется как заданный параметром свойств.
Ответ 4
Вы можете вычислить требуемую высоту TreeView, вычислив высоту node, умножив ее на количество узлов, а затем соответствующим образом установите свойство MinimumSize.
// assuming the treeview is populated!
nodeHeight = treeview1.Nodes[0].Bounds.Height;
this.MaximumSize = new Size(someMaximumWidth, someMaximumHeight);
int requiredFormHeight = (treeView1.GetNodeCount(true) * nodeHeight);
this.MinimumSize = new Size(this.Width, requiredFormHeight);
NB. Это предполагает, что treeview1 является единственным элементом управления в форме. При установке переменной требуемого параметраFormHeight вам необходимо разрешить другие элементы управления и требования к высоте, связанные с древовидным представлением, например, указанный вами tabcontrol.
(я бы согласился с @jgauffin и оценить обоснование необходимости изменять размер формы каждый раз, когда он загружается без согласия пользователя - возможно, пусть позиция пользователя и размер формы и запомните это вместо?)
Ответ 5
Этот метод решил мою проблему:
В родительской форме:
frmEmployee frm = new frmEmployee();
frm.MdiParent = this;
frm.Dock = DockStyle.Fill;
frm.Show();
В дочерней форме (событие загрузки):
this.WindowState = FormWindowState.Maximized;
Ответ 6
Это может быть полезно.
Он изменяет размер новой формы на пользовательский элемент управления, а затем привязывает пользовательский элемент управления к новой форме:
Form f = new Form();
MyUserControl muc = new MyUserControl();
f.ClientSize = muc.Size;
f.Controls.Add(muc);
muc.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
f.ShowDialog();
код >
Ответ 7
Если вы захотите подобрать контент в соответствии с формами, то это поможет. Это помогает мне, пока я пытался подгонять контент в форме, чтобы соответствовать, когда когда-либо формы были изменены.
this.contents.Size = new Размер (this.ClientRectangle.Width, this.ClientRectangle.Height);