Есть ли способ получить границы TabPage в Winforms TabControl? - PullRequest
1 голос
/ 30 сентября 2011

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

Мне просто интересно, есть ли способ узнать, где находится последний элемент управления на вкладке?Так что я могу просто сделать что-то вроде:

tabForm.Width = currentTabPage.UsedContentBorder + 10;

Или я должен сделать это, добавив все элементы управления и размеры между ними и т. Д.?

1 Ответ

2 голосов
/ 30 сентября 2011

Вы хотите узнать максимальные координаты всех элементов управления на определенной вкладке?Просто с LINQ:

int right = tab.Controls.Cast<Control>().Max(c => c.Right);
int bottom = tab.Controls.Cast<Control>().Max(c => c.Bottom);

Теперь, чтобы правильно выбрать размер формы, я думаю, вам просто нужно выяснить, насколько форма больше, чем ее TabPages ... Я думаю, что-то вроде этого:

int extraWidth = form.Width - tabControl.SelectedTab.Width;
int extraHeight = form.Height - tabControl.SelectedTab.Height;

Тогда вы просто делаете

form.Size = new Size(right + extraWidth, bottom + extraHeight);

(TabControl изменит размер автоматически, если его свойство Anchor установлено на все четыре стороны.) Мне кажется, что это можетсбой, если пользователь изменяет размер формы очень мало ... вы можете компенсировать это, вычисляя extraWidth и extraHeight в событии Form.Load, а затем сохраняя эти значения, когда они понадобятся вам позже.

...