frankzh 发表于 2007-9-5 16:12

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

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

bygg 发表于 2007-9-5 16:46

你把子窗体的边框设成none就行了<BR>

frankzh 发表于 2007-9-5 17:14

噢,这不是我想要的。 这个窗体就没办法移动的,我需要的是一个正常的窗体。就像在Excel里的子窗体操作一样

adou 发表于 2007-9-8 08:06

<P>明白意思了,可是无能为力。</P>

bygg 发表于 2007-9-8 16:04

<P>不好意思,我也没弄出来</P>

为记忆上锁 发表于 2007-9-8 18:13

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

我是新手么 发表于 2007-9-27 23:32

<DIV class=quote><B>以下是引用<U>为记忆上锁</U>在2007-9-8 18:13:06的发言:</B><BR>
<P>在父窗体加个Panel1,属性dock设置为fill。把子窗体的容器(Parent)设为Panel1</P></DIV>
<P>请问一下,parent  属性在那,我找不到啊,谢谢</P>

szhtszx 发表于 2007-9-28 22:06

回复:(我是新手么)以下是引用为记忆上锁在2007-9-8...

加了Panel1后把子窗体直接拖上去不就可以了<BR>

我是新手么 发表于 2007-9-29 19:06

<DIV class=quote><STRONG></STRONG><BR><BR>
<P>请问一下,parent  属性在那,我找不到啊,谢谢</P></DIV>
<P>自问自答:<BR><BR>me.prent=mainform.panel1</P>

frankzh 发表于 2007-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();

        }







修改後的VB.Net


程式碼區塊
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]

编程论坛