Winforms пользовательский элемент управления обрезается, когда в другой пользовательский элемент управления (иногда) - PullRequest
0 голосов
/ 24 октября 2008

Проблема довольно проста, но лучше всего иллюстрируется визуально. Обратите внимание, что все снимки экрана взяты из области дизайна Visual Studio 2005. Я не заметил никакой разницы, когда я действительно запускаю приложение.

Вот мой пользовательский элемент управления (назовем это UC-1):

alt text

Кнопки на элементе управления установлены на привязку к нижнему + правому.

Вот как это выглядит при помещении на определенный родительский пользовательский элемент управления (UC-A):

alt text

Пожалуйста, не обращайте внимания на разницу в цветах и ​​тому подобное. Некоторая стилизация выполняется в конструкторе пользовательского элемента управления.

Обратите внимание, что нижняя часть элемента управления обрезается. Экземпляр использованного элемента управления на родительском элементе установлен с границей «FixedSingle». Обратите также внимание на то, что использованный элемент управления выше оригинала, что указывает на то, что настройки нижнего якоря кнопок соблюдаются, но, по сути, выходят за пределы допустимого значения.

Чтобы подтвердить, что это определенно проблема в родительском элементе управления, обратите внимание на другой пользовательский элемент управления (UC-2), содержащий представление таблицы данных при размещении на том же родительском элементе:

alt text

Опять же, экземпляр использованного элемента управления установлен с рамкой «FixedSingle», которая помогает проиллюстрировать отсечение. Сетка данных правильно привязана к нижнему правому краю. Чтобы усилить недоумение этой проблемы, вот первый пользовательский элемент управления (UC-1) при размещении на другом родительском пользовательском элементе управления (UC-B):

альтернативный текст http://i38.tinypic.com/2rnyjd0.png

Вот второй «потребляемый» элемент управления (UC-2) при использовании формой:

alt text

Обратите внимание, на этот раз вырезать не нужно.

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

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

Кто-нибудь знает, что происходит ??

Ответы [ 3 ]

1 голос
/ 18 ноября 2008

У меня была точно такая же проблема, и я нашел ваше сообщение, когда искал возможное решение. Хотя я почти уверен, что это ошибка в winforms, я нашел некоторый обходной путь. Просто поместите все в свой пользовательский элемент управления внутри панели, закрепите панель на полную и сделайте привязку внутри панели. Это, кажется, облегчает проблему, хотя моя кнопка имеет тенденцию отображаться в несколько ином размере, чем должна быть в родительском контроле. Очень странно. Я компенсировал это, уменьшив кнопку в конструкторе, и по неизвестной причине она растянулась на несколько пикселей в родительском элементе управления. Надеюсь, это поможет.

1 голос
/ 24 октября 2008

Очень интересная проблема!

Перемещает ли ваш проблемный родитель (UC-A) какой-либо из методов, касающихся определения размера или областей клиента?

Или UC-A получил отрицательное значение для нижнего значения Padding или Margin?

Есть ли что-нибудь еще, закрепленное у нижнего края UC-A? Возможно, что-то, что имеет отрицательный размер?

Или UC-A устанавливает ограничения дочерних элементов управления? Если минимальная высота панели слишком велика, вы получите такой результат.

Надеюсь, это полезно! Если нет, есть ли шанс опубликовать исходный код в UC-A?

0 голосов
/ 24 октября 2008

Предполагая, что рассматриваемый родительский элемент управления не является стандартным типом платформы .NET, а является пользовательским, я бы предположил, что он смешивает координаты клиента и экрана где-то в своей логике. Но это только предположение.

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