Проблема со свойством Anchor элементов управления внутри UserControl

У меня возникла эта проблема при создании нового пользовательского элемента управления UserControl. В деталях я создаю производный UserControl с DataGridView, у которого для свойства Anchor установлено значение [Left, Top, Right, Bottom], чтобы DataGridView мог изменять размер всякий раз, когда изменяются размеры контейнера UserControl. Но когда приложение запускается, результат точно не ожидается. Правый и нижний края DataGridView всегда выходят за пределы границы UserControl. Чтобы понять эту проблему, я отладил и обнаружил, что всякий раз, когда создается UserControl, его размер по умолчанию всегда равен [100, 100], несмотря на то, что мы установили его на [800, 600] или что-то еще. Я думаю, что это причина проблемы. Когда мы проектируем UserControl, мы используем больший размер, но во время выполнения его размер по умолчанию равен [100, 100], поэтому автоматический расчет свойства Anchor становится неожиданным.

Может ли кто-нибудь дать мне подсказку о том, как решить эту проблему? У меня есть одно грязное решение, но иногда оно дает сбои. Мое решение заключается в том, что в обработчике событий OnLoad UserControl я устанавливаю правый и нижний край дочерних элементов управления. Это решение отлично работает для большинства моих пользовательских элементов управления UserControl, но иногда меня неправильно понимают. Иногда проблема все еще возникает. Это сбивает меня с толку.

Может ли кто-нибудь дать четкое объяснение и полное решение этого вопроса?

заранее спасибо


person Sherlock    schedule 11.12.2009    source источник


Ответы (2)


Есть несколько способов решить эту проблему, быстрый и простой способ — поместить GridView в панель ASP (с полосами прокрутки) и установить ширину панели на 100%. Теперь размер сетки не имеет значения, так как вы можете прокручивать как по вертикали, так и по горизонтали.

person BionicMan    schedule 11.12.2009
comment
Как человек с такой же проблемой, это, очевидно, не решает проблему. - person HumbleWebDev; 13.01.2017

Единственное решение, которое я могу найти прямо сейчас, - это выполнить событие загрузки с пользовательским элементом управления (вроде как вы сказали), за исключением установки высоты и ширины элемента управления, который работает со сбоями относительно родительского пользовательского элемента управления.... У меня есть datagridview, и я устанавливаю для него ширину - 50; и Высота/2,5; Это, по-видимому, мешает ему вырасти из своего родителя, в то же время придавая ему растущий эффект якоря. Я думаю, что по какой-то причине якорь привязывает его к окну, а не к родительскому элементу управления пользователя, что и вызывает эту ошибку.

person HumbleWebDev    schedule 13.01.2017