Текстовое поле, прикрепленное к форме со всех четырех сторон, не отображается должным образом - PullRequest
3 голосов
/ 25 ноября 2008

Я столкнулся с проблемой при попытке привязать текстовое поле к форме со всех четырех сторон. Я добавил текстовое поле в форму и установил для свойства Multiline значение True, а для свойства Anchor - значение Left, Right, Up и Down, чтобы текстовое поле расширялось и сжималось вместе с формой во время выполнения. У меня также есть несколько других элементов управления выше и ниже текстового поля.

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

Кто-нибудь слышал об этом, и если да, то смогли ли вы найти решение?

Спасибо!

UPDATE:

Вот часть кода дизайнера по запросу Грега Д. (я включаю только то, что было связано с самим текстовым полем, а не с другими элементами управления):

Friend WithEvents txtRecommendationText1 As System.Windows.Forms.TextBox

<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
    Me.txtRecommendationText1 = New System.Windows.Forms.TextBox

    ' ...snip...

    'txtRecommendationText1

    Me.txtRecommendationText1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                Or System.Windows.Forms.AnchorStyles.Left) _
                Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
    Me.txtRecommendationText1.Location = New System.Drawing.Point(4, 127)
    Me.txtRecommendationText1.Multiline = True
    Me.txtRecommendationText1.Name = "txtRecommendationText1"
    Me.txtRecommendationText1.Size = New System.Drawing.Size(223, 149)
    Me.txtRecommendationText1.TabIndex = 10
End Sub

ДРУГОЕ ОБНОВЛЕНИЕ:

Текстовое поле, о котором я первоначально писал, не было унаследовано от формы базового класса (хотя оно было добавлено в пользовательский класс управления пользователями; я, вероятно, должен был упомянуть об этом ранее), но недавно я столкнулся с той же проблемой на совершенно не связанном наборе элементов управления, которые были унаследованы от формы базового класса. Легко обвинить в этих проблемах возможные ошибки в .NET Framework, но это действительно начинает выглядеть именно так.

Ответы [ 4 ]

3 голосов
/ 25 ноября 2008

Ваш Form локализован? Проверьте файлы ресурсов для записи с Textbox.Size, удалите и сбросьте размер.
Ваш Form унаследован и Textbox на базовой форме? Попробуйте установить для модификатора доступа Textbox значение Защищенный или Общий.
Вы реализовали пользовательскую логику изменения размера? Выключите его и посмотрите, сохраняется ли проблема.
Вы ввели Textbox.MinimumSize / MaximumSize? Удалите или измените значение.

Это также может быть комбинацией этих вещей ...

2 голосов
/ 23 апреля 2009

Это очень вероятно из-за свойства 'AutoScaleMode', устанавливаемого в InitializeComponent (). Попробуйте установить его на «Нет» и посмотреть, исправит ли это. У меня были эти проблемы пару раз.

2 голосов
/ 27 января 2009

Текстовое поле, о котором я изначально писал, не было унаследовано от формы базового класса (хотя оно было добавлено в пользовательский класс управления пользователями; я, вероятно, должен был упомянуть об этом ранее), но недавно я столкнулся с той же проблемой на совершенно не связанном наборе элементов управления, которые были унаследованы от формы базового класса. Легко обвинить эти проблемы в возможных ошибках в .NET Framework, но мне это действительно начинает казаться таким.

2 голосов
/ 25 ноября 2008

Возвращается ли форма обратно к ожидаемому макету, когда вы изменяете его размер после странной инициализации? Кроме того, вы установили свойство Высота или MinimumHeight / MaximumHeight для текстового поля?

Если возможно, несколько фрагментов из кода конструктора могут быть полезны. :)

В прошлом я сталкивался с проблемой DPI. Если вы выполняете / тестируете свой код на машине с настройкой DPI, отличной от той, на которой вы разрабатываете, вы можете наблюдать некоторые странные вещи.

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

Включает ли ваша программа какую-либо настраиваемую логику изменения размера или она изменяет размер текстового поля программно за пределами сгенерированного дизайнером кода? Это также может привести к странному поведению. Я взял на себя обслуживание ряда программных продуктов в моей организации, где первоначальные разработчики потратили много времени на реализацию (с ошибками) логики изменения размера, которую мне пришлось вырвать, чтобы я мог просто позволить сгенерированному дизайнером коду выполнить работа для меня.

...