Разве плохо использовать форму Windows в качестве элемента управления? - PullRequest
1 голос
/ 20 октября 2011

Я знаю, что можно использовать Form в качестве дочернего элемента управления в другой форме.

ChildForm child = new ChildForm();
child.TopLevel = false;
child.FormBorderStyle = FormBorderStyle.None;
child.Show();
containerControl.Controls.Add(child);

Я понимаю, что это не то, для чего Form был разработан.Мне было интересно, каковы здесь последствия, в отличие от использования UserControl?Есть ли реальные недостатки?Какие-нибудь большие ненужные накладные расходы?Неожиданное поведение?

С другой стороны, есть ли преимущества использования формы?Есть ли что-то, что вы не можете сделать с помощью UserControl, что вы можете сделать с формой, которая может быть полезна, если используется в качестве дочернего элемента управления?

Я понимаю, что и 1011 *, и UserControl наследуют ContainerControl, но чем отличаются их ненаследуемые члены?

Мой сценарий

Причина, по которой я спрашиваю, заключается в том, что у меня есть существующий элемент управления Form, что я бы хотел, чтобы иногда отображался сам по себе (для разработки и как небольшая дополнительная функция), но для не нужно .Однако мне нужно событие Closing формы (которое не наследуется от ContainerControl), и мне нужно иметь возможность отменить закрытие формы, если файл был отредактирован и не сохранен.

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

1 Ответ

1 голос
/ 20 октября 2011

Если вы проверите иерархию наследования в MSDN, вы обнаружите, что и UserControl, и Form наследуют от ContainerControl , так что фактически до базового класса почти все должно быть одинаковым.

сказал, в общем, Я думаю, вам следует избегать использования объекта Form, размещенного в качестве элемента управления, если вы не имеете дело с устаревшим неизменяемым кодом или если вы абсолютно не хотите, чтобы этот дизайн имел такую ​​возможность, в определенных случаях. в других случаях, чтобы показать форму в одиночку как верхний уровень, не размещенный где-либо.

Если вам просто нужен контейнер для размещения других элементов управления пользовательского интерфейса, вы можете использовать UserControl.

фактически все, вплоть до уровня Win32, преобразуется в дескрипторы и насосы сообщений / WindowProc и т. Д., Даже простой TextBox будет иметь дескриптор и будет получать и принимать сообщения, заботясь о своей клиентской и не клиентской области и т. *

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