Подтвердить что ты не робот

Как изменить размер формы, чтобы она соответствовала ее контенту?

Я пытаюсь реализовать следующее поведение:

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

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

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

[ОБНОВЛЕНИЕ]

Это первый диалог, который видит пользователь моего приложения: это диалог для выбора базы данных для работы. Это список баз данных с tabcontrol, buttens и т.д. Если список слишком длинный, появляются полосы прокрутки, и мой коллега хочет, чтобы они исчезли.

4b9b3361

Ответ 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);