Проблема с масштабированием пользовательского контроля при добавлении во время выполнения в .Net, WinForms

2

Вот ссылка на небольшой пример VB.Net 2008:

http://www.4shared.com/file/255391716/26c45c1e/UserControlTest.html

И, образец С#:

http://www.4shared.com/file/255392906/27f4efbb/UserControlTestCHash.html

Извините, но это бесплатный хостер, поэтому вам нужно подождать 10 секунд.

Сначала выполните шаги для репликации, затем я объясню, в чем проблема:

(1) Создайте System.Windows.Forms.UserControl и добавьте кнопку в нижний правый угол. Оставьте кнопку якоря по умолчанию (вверху слева). Добавьте еще несколько кнопок, расположенных вокруг, чтобы вы могли видеть, что они масштабируются правильно.

(2) Добавьте UserControl в форму в конструкторе после вызова InitializeComponent.

(3) Запустите форму.

(4) Увеличьте размер шрифта формы каким-либо образом (например, нажмите кнопку формы).

Все элементы управления в шкале usercontrol отлично, но сам пользовательский контроль не работает. Его ширина и высота слишком сильно увеличиваются. Посмотрите на границу между кнопкой в ​​нижнем правом углу и пользовательским контролем.

Чтобы устранить проблему, пользовательский элемент управления должен быть добавлен до вызова InitializeComponent.

Если мне не удалось добавить usercontrol перед InitializeComponent, есть ли способ для исправления масштабирования?

Теги:
scaling
user-controls

2 ответа

9

Изменить: Я удалил свой предыдущий ответ (который в основном сказал "отлично работает на моей машине" ) и заменил его следующим.

В пользовательском UserControl установите AutoScaleMode = Inherit. Это должно исправить чрезмерное масштабирование пользовательского элемента управления.

  • 0
    Привет, это должен быть System.Windows.Forms.UserControl, а не просто обычный элемент управления.
  • 0
    Я исправил свой вопрос, чтобы уточнить
Показать ещё 3 комментария
2

Нет воспроизведения, он отлично масштабируется. Он не будет масштабироваться должным образом, если вы установили свойство Font в UserControl и не соответствовали размеру шрифта формы.

Свойство Font является "эмбиентным" свойством, таким как ForeColor и BackColor. Пока вы оставляете его по умолчанию (не жирным шрифтом в окне "Свойства" ), он будет использовать шрифт родителя. Когда каждый элемент управления использует тот же размер шрифта, он будет масштабироваться пропорционально.

Чтобы исправить, выберите текст свойства Font в окне "Свойства", нажмите "Backspace", чтобы стереть его, и нажмите "Enter". Он сбрасывается до значения по умолчанию.


Исправьте свой код следующим образом:

        this.SuspendLayout();
        UserControl1 uc = new UserControl1();
        this.Controls.Add(uc);
        this.ResumeLayout(false);
  • 0
    @nobugz: чтобы уточнить: если я установлю шрифт в своей форме на то, что я хочу, и оставлю настройку «Шрифт» в «По умолчанию» в моих UserControls они «унаследуют» мои настройки родительского шрифта? Я не должен делать или устанавливать что-то еще? AutoScale = Font или что-то?
  • 0
    Да, вот как работают окружающие свойства.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню