2013-11-28 4 views
0

У меня есть родительская форма с графическим окном в виде дочернего окна. В родительской форме на панели слева расположены кнопки. В оставшейся части родительской формы будет показано дочернее окно. Я устанавливаю дочерние окна вручную следующим образом.Scrollbar Обновить проблему в родительской форме MDI

первое окно

второе окно

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

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

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

Издание показано ниже: issue http://i39.tinypic.com/s4njh2.png

это то, как это должно быть

this is how it should be http://i40.tinypic.com/2w2iydf.png

Я загрузил видео, чтобы показать поведение, а также демонстрационный проект. Демонстрационный проект: http://www.filedropper.com/demoforscrollbar экрана Доля видео: http://tinypic.com/r/ic0615/5

Есть в любом случае я могу обновить полосу прокрутки без перемещения курсора пользователь или пользователь нажимает на него?

Я попытался изменить MdiParentForm.VerticalScroll.Minimum и максимум после открытия или закрытия дочернего окна, но это не помогло. Я также попытался отключить и включить вертикальную прокрутку вместе с MdiParentForm.AdjustFormScrollbars, но не работал.

У меня есть autoscroll = false, так как я не могу сделать это правдой в форме mdicontainer. После создания дочернего окна, я написал ниже в родительской форме.

this.VerticalScroll.Minimum = 0; 
    this.VerticalScroll.Maximum = this.MdiChildren[this.MdiChildren.Length -1].Location.Y + this.MdiChildren[this.MdiChildren.Length - 1].Height; 
    this.AdjustFormScrollbars(true);    
    this.PerformLayout(); 

ответ

0

Я понял это. упущенный очень мелкий предмет. я должен написать

this.Refresh(); 

после this.performlayout(); Он сделал трюк.

1
Private Sub Form2_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move 
    Me.ParentForm.PerformLayout() 
End Sub 

Ссылка

Refresh scroll bars on winform

+0

Я забыл упомянуть, я уже пробовал вызывать this.Performlayout() из родительской формы после создания или закрытия дочернего окна. полоса прокрутки никогда не отражала никаких изменений. –

+0

@saumilpatel Похоже, что вы не установили свойство Dock вашего PropertyGrid так, чтобы оно плавало поверх MdiClient. Установите свойство Док-станции PropertyGrid вправо, а затем MdiClient будет ограничиваться только остальной формой, и полосы прокрутки должны появиться там, где вы хотите. – Monika

+0

Моя проблема отличается от указанной вами ссылки. ничто не плавает, все правильно установлено. Появляется полоса прокрутки. Проблема - странное поведение полосы прокрутки –

Смежные вопросы