注册 登录
编程论坛 VB.NET论坛

如何禁用MDI窗口的自动滚动条

frankzh 发布于 2007-09-05 16:12, 5513 次点击

网上已经找过很多类似的问题,但似乎还没有人能解决这个问题。
问题很简单,就在怎么样在MDI窗体中禁用掉自动滚动条。如果子窗体的边缘超过的主窗体的显示区域,便会出现滚动条。已经设置过主窗体或子窗体的autoscroll属性,都没有。
可能的解决方案是找出MDIClient实例,scrollbar可能就是由MDIClient 控制,但是不知如何能得到这个scrollbar的实例。
请各路高手帮忙。谢谢

9 回复
#2
bygg2007-09-05 16:46
你把子窗体的边框设成none就行了
#3
frankzh2007-09-05 17:14
噢,这不是我想要的。 这个窗体就没办法移动的,我需要的是一个正常的窗体。就像在Excel里的子窗体操作一样
#4
adou2007-09-08 08:06

明白意思了,可是无能为力。

#5
bygg2007-09-08 16:04

不好意思,我也没弄出来

#6
为记忆上锁2007-09-08 18:13

在父窗体加个Panel1,属性dock设置为fill。把子窗体的容器(Parent)设为Panel1

#7
我是新手么2007-09-27 23:32
以下是引用为记忆上锁在2007-9-8 18:13:06的发言:

在父窗体加个Panel1,属性dock设置为fill。把子窗体的容器(Parent)设为Panel1

请问一下,parent 属性在那,我找不到啊,谢谢

#8
szhtszx2007-09-28 22:06
回复:(我是新手么)以下是引用为记忆上锁在2007-9-8...
加了Panel1后把子窗体直接拖上去不就可以了
#9
我是新手么2007-09-29 19:06


请问一下,parent 属性在那,我找不到啊,谢谢

自问自答:

me.prent=mainform.panel1

#10
frankzh2007-12-18 13:44
终于找到答案了,大家分享一下
原始C#


Code Block        
    private const int SB_BOTH = 3;

        private const int WM_NCCALCSIZE = 0x83;

 

        [DllImport("user32.dll")]

        private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);

 

        protected override void WndProc(ref Message m)

        {

            if (mdiClient != null)

            {

                ShowScrollBar(mdiClient.Handle, SB_BOTH, 0 /*Hide the ScrollBars*/);

            }

 

            base.WndProc(ref m);

        }

        MdiClient mdiClient = null;

        private void Form1_Load(object sender, EventArgs e)

        {

            foreach (Control c in this.Controls) //Find the MdiClient in the MdiWindow

            {

                if (c is MdiClient)

                {

                    mdiClient = c as MdiClient;

                }

            }

 

            Form2 form = new Form2();

            form.MdiParent = this;

            form.Show();

        }



 

 

修改後的


程式碼區塊
Imports System.Runtime.InteropServices

Public Class Form1

    Dim mdiClient As MdiClient = Nothing
    Dim SB_BOTH As Integer = 3

    <DllImport("user32.dll")> _
    Private Shared Function ShowScrollBar(ByVal hWnd As IntPtr, ByVal wBar As Integer, ByVal bShow As Integer) As Integer
    End Function

    Protected Overrides Sub WndProc(ByRef m As Message)
        If mdiClient IsNot Nothing Then
            ShowScrollBar(mdiClient.Handle, SB_BOTH, 0)
        End If

        MyBase.WndProc(m)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For Each c As Control In Me.Controls
            If TypeOf c Is MdiClient Then
                mdiClient = c
            End If
        Next

        Dim fm As Form = New Form2
        fm.MdiParent = Me
        fm.Show()

    End Sub
End Class
1