Свойства метки C # не будут обновляться при изменении размера - PullRequest
0 голосов
/ 21 июня 2010

Я недавно начал знакомиться с Visual Studio 2010 и C # для прохождения практики. В C # нет встроенной функции InputBox, поэтому я создал собственную форму с текстовым полем, двумя кнопками и простой меткой.

У меня есть функция, позволяющая программисту вызывать форму в обычном формате (где пользователь вводит данные через текстовое поле) или в формате да / нет (где форма просто отображает вопрос и кнопки «да» и «нет») ,

Когда я переключаюсь на формат да / нет, я хочу программно центрировать метку. Я использую код:

labelNote.Left = inputBox.Left + (inputBox.Width / 2) - (labelNote.Width / 2);

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

Спасибо за ваше время

Ответы [ 3 ]

0 голосов
/ 21 июня 2010

Ну, вы можете прикрепить событие к Label.TextChanged. Честно говоря, было бы лучше изменить TextAlign или что-то в этом роде: попробуйте выполнить макет декларативным способом, а не делать это явно с помощью кода. Это заставляет вещи работать лучше.

Я обнаружил, что элемент управления [TableLayoutPanel] 1 достаточно прост для работы - большую часть времени (а иногда и полная боль).

0 голосов
/ 22 июня 2010

Оказывается, я допустил глупую ошибку (обычная тема для меня при отладке. Очень маленькие вещи остаются незамеченными в течение длительного времени).

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

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

0 голосов
/ 21 июня 2010

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

Actionlistener:

Private Sub formName_Resize(ByVal sender As Object, ByVal e As  EventArgs) Handles MyBase.Resize

Вызывает actionlistener:

formName_Resize(sender, e)
...