Текстовое поле, привязанное к форме со всех 4 сторон, не отображается должным образом

StackOverflow https://stackoverflow.com/questions/318632

Вопрос

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

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

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

Спасибо!

Обновить:

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

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, но мне это действительно начинает казаться именно так.

Это было полезно?

Решение 3

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top