标题:如何禁用MDI窗口的自动滚动条
只看楼主
frankzh
Rank: 1
来 自:SH
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-9-5
 问题点数:0 回复次数:9 
如何禁用MDI窗口的自动滚动条

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

搜索更多相关主题的帖子: MDI 窗体 窗口 滚动 自动 
2007-09-05 16:12
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
你把子窗体的边框设成none就行了

飘过~~
2007-09-05 16:46
frankzh
Rank: 1
来 自:SH
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-9-5
得分:0 
噢,这不是我想要的。 这个窗体就没办法移动的,我需要的是一个正常的窗体。就像在Excel里的子窗体操作一样
2007-09-05 17:14
adou
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:81
注 册:2006-8-24
得分:0 

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


大家好,才是真的好!
2007-09-08 08:06
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 

不好意思,我也没弄出来


飘过~~
2007-09-08 16:04
为记忆上锁
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:96
专家分:0
注 册:2007-4-27
得分:0 

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


没有你得不到滴,只有你不想要滴
2007-09-08 18:13
我是新手么
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-5-3
得分:0 
以下是引用为记忆上锁在2007-9-8 18:13:06的发言:

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

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

2007-09-27 23:32
szhtszx
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-1-22
得分:0 
回复:(我是新手么)以下是引用为记忆上锁在2007-9-8...
加了Panel1后把子窗体直接拖上去不就可以了
2007-09-28 22:06
我是新手么
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-5-3
得分:0 


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

自问自答:

me.prent=mainform.panel1

2007-09-29 19:06
frankzh
Rank: 1
来 自:SH
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-9-5
得分:0 
终于找到答案了,大家分享一下
原始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
2007-12-18 13:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-167888-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.579126 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved