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

Вот ссылка на крошечный образец VB.Net 2008:

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

А, образец C #:

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 02 апреля 2010

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

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

2 голосов
/ 02 апреля 2010

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

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

Чтобы исправить, выделите текст свойства «Шрифт» в окне «Свойства», нажмите клавишу «Backspace», чтобы стереть его, и нажмите «Enter». Сбрасывается обратно к значению по умолчанию.


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

        this.SuspendLayout();
        UserControl1 uc = new UserControl1();
        this.Controls.Add(uc);
        this.ResumeLayout(false);
...