Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> размер User Control 
V
    Опции темы
anonym
Дата 2.12.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Допустим я создал User Control, установил в его дизайнере размеры 100x100 и поместил на форму. В конструкторе этого контрола я обращаюсь к свойству Height, оно равно 100. Но если на главной форме этот контрол скажем растянуть по вертикали, то Height всё равно остаётся 100. Можно ли как-нибудь сделать, чтобы мы получали фактический размер, то есть тот размер, который контрол имеет на самой форме?
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Попробуй ClientRectangle.Height или Bounds.Height.
PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Не, та же фигня... Вообще как-то нелогично сделано... Почему сразу не даётся реальный размер? По-моему удобно бы было - растянул контрол на форме, он тут же сам и перерисовался при запуске в соответствии с новыми размерами...
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



А ты наследовался к какому-то базовому контролу или ты наследуешь UserControl?
Вообще то о чем ты пишешь должно работать. Но только если ты наследуешься к UserControl тебе нужно переопределить OnResize.
PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Да, наследую от UserControl. В общем, у меня должна рисоваться окружность, которая так сказать вписывается в прямоугольник с нашим контролом. Естественно, для этого нужно знать размеры контрола.

OnResize это я так понимаю рястягивание во время выполнения? Мне-то немного другое нужно. Чтобы можно было перетащить наш контрол на форму, установить у него [в режиме дизайна самой формы] любые размеры и чтобы окружность рисовалась в соответствии с новыми размерами...
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



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

PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Dogo, спасибо за помощь. Но что именно нужно там написать?  smile 

UserControl1.Height = чему?

Это сообщение отредактировал(а) anonym - 2.12.2007, 17:13
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Там нужно написать
Код

myCircle.Height = this.Height;
myCircle.Width = this.Width;

где myCircle  - это объект класса описывающего окружность, которая вписана в область контрола.


Это сообщение отредактировал(а) Dogo - 2.12.2007, 17:26
PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Dogo, Спасибо, вроде чё-то получается  smile 

Хмм... раньше у меня параметры окружности определялись в конструкторе класса UserControl1 сразу после InitializeComponent(). При этом размеры контрола соответствовали тем, которые мы задали в режиме дизайна самого контрола. Но если посмотреть на значения Height и Width немного погодя (сколько - для меня загадка smile ), то они уже становятся равными фактическим размерам контрола на форме. Попробовал пихнуть определение параметров в метод OnPaint - тоже работает)
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Цитата(anonym @  2.12.2007,  19:04 Найти цитируемый пост)
Попробовал пихнуть определение параметров в метод OnPaint - тоже работает

Конечно работает, после обработки OnResize, контрол инвалидейтится и перерисовывается. Соответственно вызывается OnPaint. Но OnPaint вызывается не только после OnResize => пересчет размеров будет проходить в пустую. Идейно в OnPaint должно происходить только рисование, никакой арифметики и прочей математики...  smile

Добавлено через 2 минуты и 18 секунд
Спасибо за "+"
PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Да, согласен)
PM MAIL   Вверх
anonym
Дата 2.12.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Хмм... А вот ещё вопрос... Получается, событие Resize вызывается только если размеры, установленные в дизайнере контрола, не совпадают с фактическими размерами (установленными в дизайнере формы). Если же они совпадают, приходится делать все расчёты в конструкторе контрола. То есть получается, что в конструкторе и в методе OnResize у нас должен быть одинаковый код? Или может сделать третий метод и просто вызывать его из обоих?...
PM MAIL   Вверх
Dogo
Дата 2.12.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Мне кажется, что лучше создать отдельный метод. В этом и заключается один из смыслов ООП ... smile  (да и в принципе программирования)
...а кстати, ОнРесайз, по-моему, вызывается после того как объект помещается на форму(дизайн-тайм), то есть в конструкторе вообще можно этого не делать, хотя никто не отменял первичную инициализацию свойств... smile

PM MAIL ICQ   Вверх
anonym
Дата 2.12.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Цитата(Dogo @  2.12.2007,  23:11 Найти цитируемый пост)
ОнРесайз, по-моему, вызывается после того как объект помещается на форму(дизайн-тайм)

Неа) Я специально попробовал без конструктора... Размер 151;150 - всё рисуется. (даже в режиме дизайна =) ) Ставлю 150;150 - пропадает. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.