Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Заставить перерисоваться детей


Автор: cupper 22.6.2011, 15:04
Есть базовая абстрактная форма. На ней находит RichBox, с выставленны свойствами Anchor
Код

this.rbxMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));

Есть форма, которая наследует этот класс.  В ней мне нужно изменить размеры базовой формы
Код

this.ClientSize = new System.Drawing.Size(686, base.Size.Height);

размер формы изменяется, но вот RichBox не растягивается при этом. Не знаю как решить эту проблему. Напрашивается что я должен как то вызвать событие о том что изменился размер окна и нужно перерисовать всех его детей, но какой событие вызвать и какие параметры ему передать я не могу найти.

Автор: -Mikle- 22.6.2011, 16:02
А зачем this.ClientSize? this.Size не помогает?

Автор: cupper 22.6.2011, 16:43
Цитата(-Mikle- @ 22.6.2011,  16:02)
А зачем this.ClientSize? this.Size не помогает?

никакой разницы нет. И так и так пробовал. и через this и через base. Invalidate тоже вызывал.

Автор: cupper 23.6.2011, 08:14
Возможно так просто нельзя делать. Тогда как можно реализовать следующее:
Есть базовая форма, на ней richbox с выставленными anchor (лева, право, топ). Далее я наследуюсь от этой формы, но каждый наследник должен иметь свой. Перерасчитывать координаты и размеры всех элементы базовой формы в ручную, совсем не хочется. 

Автор: -Mikle- 24.6.2011, 13:03
Что-то не пойму в чем проблема или что нужно. Вот сделал базовую форму, наследовался от нее. Ничего вручную не делал. Анчоры установленные в базовой форме работают сами по себе как и ожидалось. Зачем нужно что-то вручную менять?

Автор: cupper 27.6.2011, 09:05
Цитата(-Mikle- @ 24.6.2011,  13:03)
Что-то не пойму в чем проблема или что нужно. Вот сделал базовую форму, наследовался от нее. Ничего вручную не делал. Анчоры установленные в базовой форме работают сами по себе как и ожидалось. Зачем нужно что-то вручную менять?

Вы меня не поняли. 
У меня есть базовая форма, 200 на 200, на ней какой то элемент с выставленными свойствами
Код

this.rbxMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
this.rbxMessage.Location = new System.Drawing.Point(12, 13);
...
this.ClientSize = new System.Drawing.Size(655, 505);


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

this.Size = new System.Drawing.Size(835, 580);

у меня rbxMessage остается прежних размеров и не растягивается.

Автор: cupper 27.6.2011, 09:38
PS. короче я переопределил у базовой формы OnResize и в ручную пересчитываю размеры и координаты всех элементов, и теперь работает независимо от того кто меняет размер формы, человек или код.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)