| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > размер User Control |
| Автор: anonym 2.12.2007, 12:31 |
| Допустим я создал User Control, установил в его дизайнере размеры 100x100 и поместил на форму. В конструкторе этого контрола я обращаюсь к свойству Height, оно равно 100. Но если на главной форме этот контрол скажем растянуть по вертикали, то Height всё равно остаётся 100. Можно ли как-нибудь сделать, чтобы мы получали фактический размер, то есть тот размер, который контрол имеет на самой форме? |
| Автор: Dogo 2.12.2007, 13:37 |
| Попробуй ClientRectangle.Height или Bounds.Height. |
| Автор: anonym 2.12.2007, 14:35 |
| Не, та же фигня... Вообще как-то нелогично сделано... Почему сразу не даётся реальный размер? По-моему удобно бы было - растянул контрол на форме, он тут же сам и перерисовался при запуске в соответствии с новыми размерами... |
| Автор: Dogo 2.12.2007, 14:45 |
| А ты наследовался к какому-то базовому контролу или ты наследуешь UserControl? Вообще то о чем ты пишешь должно работать. Но только если ты наследуешься к UserControl тебе нужно переопределить OnResize. |
| Автор: anonym 2.12.2007, 16:12 |
| Да, наследую от UserControl. В общем, у меня должна рисоваться окружность, которая так сказать вписывается в прямоугольник с нашим контролом. Естественно, для этого нужно знать размеры контрола. OnResize это я так понимаю рястягивание во время выполнения? Мне-то немного другое нужно. Чтобы можно было перетащить наш контрол на форму, установить у него [в режиме дизайна самой формы] любые размеры и чтобы окружность рисовалась в соответствии с новыми размерами... |
| Автор: Dogo 2.12.2007, 16:40 |
| Нет, это не только во время выполнения, но и в дизайн тайме тоже обрабатывается... Попробуй ... |
| Автор: anonym 2.12.2007, 17:12 |
| Dogo, спасибо за помощь. Но что именно нужно там написать? UserControl1.Height = чему? |
| Автор: Dogo 2.12.2007, 17:25 | ||
Там нужно написать
где myCircle - это объект класса описывающего окружность, которая вписана в область контрола. |
| Автор: anonym 2.12.2007, 18:04 |
| Dogo, Спасибо, вроде чё-то получается Хмм... раньше у меня параметры окружности определялись в конструкторе класса UserControl1 сразу после InitializeComponent(). При этом размеры контрола соответствовали тем, которые мы задали в режиме дизайна самого контрола. Но если посмотреть на значения Height и Width немного погодя (сколько - для меня загадка |
| Автор: anonym 2.12.2007, 19:04 |
| Да, согласен) |
| Автор: anonym 2.12.2007, 22:57 |
| Хмм... А вот ещё вопрос... Получается, событие Resize вызывается только если размеры, установленные в дизайнере контрола, не совпадают с фактическими размерами (установленными в дизайнере формы). Если же они совпадают, приходится делать все расчёты в конструкторе контрола. То есть получается, что в конструкторе и в методе OnResize у нас должен быть одинаковый код? Или может сделать третий метод и просто вызывать его из обоих?... |
| Автор: Dogo 2.12.2007, 23:11 |
| Мне кажется, что лучше создать отдельный метод. В этом и заключается один из смыслов ООП ... ...а кстати, ОнРесайз, по-моему, вызывается после того как объект помещается на форму(дизайн-тайм), то есть в конструкторе вообще можно этого не делать, хотя никто не отменял первичную инициализацию свойств... |
| Автор: anonym 2.12.2007, 23:47 | ||
Неа) Я специально попробовал без конструктора... Размер 151;150 - всё рисуется. (даже в режиме дизайна =) ) Ставлю 150;150 - пропадает. |