0

У меня есть простой пользовательский элемент управления (просто пример): он 40x100, но изменяемый по размеру. Он имеет две кнопки, одна закреплена наверху, одна закреплена внизу.Элементы управления Windows Forms на локализованных формах вызывают проблемы с отображением в Designer

Он поставил этот элемент управления на форму и растянул его до 40x400. Это прекрасно работает.

Но как только я переключу форму на Localizable = True и изменим язык для перевода любых строк, Дизайнер отобразит пользовательский элемент управления , как если бы он был 40x100 для обоих по умолчанию переведенным языком, то есть нижней кнопкой не закрепляется.

Или лучше: нижняя кнопка является отображается, как если бы он был не закреплен. Однако элемент управления занимает достаточное пространство (40x400) (см. Выделение выделения). И он отлично отображает во время выполнения, это просто проблема с дизайнером.

A picture showing the issue.

ли я пропускаю что-то здесь? Так ли это должно работать?

Im на VS2010 на данный момент, попробовал старый VS2005, но он там же.

Благодаря ...

+0

Каждый язык локализации имеет собственный файл ресурсов 'yourForm.en.resx'. Через эти файлы вы можете установить различные параметры для элементов управления (.Text, .Location, .Top, .Left и т. Д.). Я думаю, когда вы включаете Localizable = true, разработчики генерировали ресурсы для новых языков, но все опции были сброшены. – Fabio

+0

Странная вещь: сам пользовательский элемент _not_ resetted (его высота), но только элементы управления _inside_ пользовательский элемент управления. И только пока отображается в Designer, а не во время выполнения. –

ответ

2

Я мог бы легко REPRO эту проблему путем закрепления второй кнопки в нижней части. Свойство Anchor имеет несколько необычных режимов отказа, макет не всегда пересчитывается, когда это должно быть. Вы нашли один такой случай. Я думаю, основная проблема заключается в том, что свойство Size также является локализуемым свойством, и разработчик не запускает необходимые события при запуске нового набора локализации. Что-то вроде этого, ничего очень тривиального.

Вам нужно будет выполнить эту проблему, и не полагайтесь на свойство Anchor, чтобы правильно установить кнопку. Это всего лишь однострочный код в вашем коде UserControl, например:

protected override void OnResize(EventArgs e) { 
    button2.Top = this.ClientSize.Height - button2.Height; 
    base.OnResize(e); 
} 
+0

Это сработало, спасибо. Для более сложных элементов управления кажется, что достаточно разместить все элементы на одной внешней панели и сделать «OuterPanel.Width = ClientSize.Width» и «OuterPanel.Height = ClientSize.Height». Это делает все отображаемым, как и предполагалось, даже если элементы внутри панели закреплены справа или внизу. –