【问题标题】:Scrollbar Refresh Issue in MDI Parent FormMDI 父窗体中的滚动条刷新问题
【发布时间】:2013-11-28 05:49:46
【问题描述】:

我有一个以图形窗口作为子窗口的父窗体。 在父窗体中,面板左侧有按钮。 在父窗体的剩余区域中,将显示子窗口。我正在通过以下方式手动定位子窗口。

第一个窗口

第二个窗口

第三个窗口,垂直方式。因此,这也会在父窗体的右侧创建一个滚动条。

单击图形按钮后,将创建子窗口并将其放置在所有其他子窗口的底部。由于添加了一个新窗口,因此也需要刷新滚动条大小。仅当我将光标悬停在滚动条上时,条的垂直高度才会改变。 所以,我点击左侧的按钮,然后要更新滚动条,我需要将光标移动到右侧的滚动条上。

我尝试访问滚动条,但由于它是自动生成的,我无法找到刷新它或手动设置焦点的方法。

问题如下图:

应该是这样的

我已经上传了一个视频来展示这个行为以及一个演示项目。 演示项目:http://www.filedropper.com/demoforscrollbar 屏幕分享视频:http://tinypic.com/r/ic0615/5

我是否可以在不移动光标或用户点击的情况下更新滚动条?

我尝试在打开或关闭子窗口后更改 MdiParentForm.VerticalScroll.Minimum 和 maximum,但没有帮助。我还尝试与 MdiParentForm.AdjustFormScrollbars 一起禁用和启用垂直滚动,但没有奏效。

我有 autoscroll = false,因为我无法以 mdicontainer 形式将其设为 true。 创建子窗口后,我在父窗体中写在下面。

    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();

【问题讨论】:

    标签: c# .net winforms mdi mdiparent


    【解决方案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

    【讨论】:

    • 我忘了提,我已经尝试在创建或关闭子窗口后从父窗体调用 this.Performlayout()。滚动条从未反映任何变化。
    • @saumilpatel 听起来您还没有设置 PropertyGrid 的 Dock 属性,因此它浮动在 MdiClient 之上。将 PropertyGrid 的 Dock 属性设置为 Right,然后 MdiClient 将仅限于表单的其余部分,并且滚动条应该出现在您想要的位置。
    • 我的问题与您提供的链接不同。什么都没有浮动,一切都正确定位。滚动条也会出现。问题是滚动条的奇怪行为
    【解决方案2】:

    我想通了。 错过了非常小的事情。 我需要写

        this.Refresh(); 
    

    在 this.performlayout() 之后; 它成功了。

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多