![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Допустим я создал User Control, установил в его дизайнере размеры 100x100 и поместил на форму. В конструкторе этого контрола я обращаюсь к свойству Height, оно равно 100. Но если на главной форме этот контрол скажем растянуть по вертикали, то Height всё равно остаётся 100. Можно ли как-нибудь сделать, чтобы мы получали фактический размер, то есть тот размер, который контрол имеет на самой форме?
|
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Попробуй ClientRectangle.Height или Bounds.Height.
|
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Не, та же фигня... Вообще как-то нелогично сделано... Почему сразу не даётся реальный размер? По-моему удобно бы было - растянул контрол на форме, он тут же сам и перерисовался при запуске в соответствии с новыми размерами...
|
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
А ты наследовался к какому-то базовому контролу или ты наследуешь UserControl?
Вообще то о чем ты пишешь должно работать. Но только если ты наследуешься к UserControl тебе нужно переопределить OnResize. |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Да, наследую от UserControl. В общем, у меня должна рисоваться окружность, которая так сказать вписывается в прямоугольник с нашим контролом. Естественно, для этого нужно знать размеры контрола.
OnResize это я так понимаю рястягивание во время выполнения? Мне-то немного другое нужно. Чтобы можно было перетащить наш контрол на форму, установить у него [в режиме дизайна самой формы] любые размеры и чтобы окружность рисовалась в соответствии с новыми размерами... |
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Нет, это не только во время выполнения, но и в дизайн тайме тоже обрабатывается...
Попробуй ... |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Dogo, спасибо за помощь. Но что именно нужно там написать?
UserControl1.Height = чему? Это сообщение отредактировал(а) anonym - 2.12.2007, 17:13 |
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Там нужно написать
где myCircle - это объект класса описывающего окружность, которая вписана в область контрола. Это сообщение отредактировал(а) Dogo - 2.12.2007, 17:26 |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Dogo, Спасибо, вроде чё-то получается
Хмм... раньше у меня параметры окружности определялись в конструкторе класса UserControl1 сразу после InitializeComponent(). При этом размеры контрола соответствовали тем, которые мы задали в режиме дизайна самого контрола. Но если посмотреть на значения Height и Width немного погодя (сколько - для меня загадка |
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Конечно работает, после обработки OnResize, контрол инвалидейтится и перерисовывается. Соответственно вызывается OnPaint. Но OnPaint вызывается не только после OnResize => пересчет размеров будет проходить в пустую. Идейно в OnPaint должно происходить только рисование, никакой арифметики и прочей математики... Добавлено через 2 минуты и 18 секунд Спасибо за "+" |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Да, согласен)
|
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Хмм... А вот ещё вопрос... Получается, событие Resize вызывается только если размеры, установленные в дизайнере контрола, не совпадают с фактическими размерами (установленными в дизайнере формы). Если же они совпадают, приходится делать все расчёты в конструкторе контрола. То есть получается, что в конструкторе и в методе OnResize у нас должен быть одинаковый код? Или может сделать третий метод и просто вызывать его из обоих?...
|
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Мне кажется, что лучше создать отдельный метод. В этом и заключается один из смыслов ООП ...
...а кстати, ОнРесайз, по-моему, вызывается после того как объект помещается на форму(дизайн-тайм), то есть в конструкторе вообще можно этого не делать, хотя никто не отменял первичную инициализацию свойств... |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
||||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |