2013-07-22 2 views
0

У меня есть этот кодДинамические Winforms контролировать изменение размера

ShadedRoundedRectangle rect = new ShadedRoundedRectangle(); 
rect.Location = new Point(0, nextY); 
rect.Size = new Size(200, 20); 
rect.NewText = String.Format("{0} x {1} ({2} kcals)", ci.Amount, ci.Product.ItemName, ci.Amount * ci.Product.Calories); 

panel1.Controls.Add(rect); 

ShadedRoundedRectangle является пользовательский элемент управления, который рисует заштрихованный прямоугольник с закругленными краями размером 200,20 как вы можете видеть. При добавлении rect в коллекцию панельных элементов управления размер изменяется на 233, 23.

Пользовательский элемент управления имеет 0,0,0,0, определенный как для объектов padding, так и для margin, и я зациклен на том, почему это происходит.

+2

Что такое настройки «Dock» и «Anchor»? Откуда вы знаете, что размер изменился? –

+0

Для управления пользователем; 'Anchor' -' Top, Left 'и 'Dock'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Intrepid

+1

Я положил точку прерывания на строку 'panel1.Controls.Add (rect)', а затем перешагнул ее с помощью F10, открыл коллекцию 'Controls', используя отладчик VS, чтобы открыть объект' base', пока не найду ' Size' и увидел, что там было другое. – Intrepid

ответ

0

Я отвечаю на свой вопрос, поскольку выяснил, что вызывало изменение свойства Size после добавления пользовательского элемента управления в коллекцию элементов управления панели.

Изменение шрифта по умолчанию пользовательского элемента управления MS Sans Serif 8.25pt на другой шрифт, то есть Arial Regular 8.25pt в этом случае разрешило мою проблему, и размер не изменился после того, как пользовательский элемент управления был добавлен в коллекцию элементов управления панели.

Должна быть ошибка, которая существует в Visual Studio 2012, которая вызывает подобное поведение.

0

Настоящей проблемой является свойство AutoScaleMode. По умолчанию он установлен в Font, что означает, что если размер шрифта формы отличается от размера шрифта элемента управления, размер элемента управления будет изменен.

Установка параметра AutoScaleMode равным None, решит эту проблему. Кроме того, убедитесь, что форма и элемент управления имеют один и тот же шрифт.