C#:如何从mdi父项中删除滚动条?

时间:2009-05-12 20:36:33

标签: c# visual-studio-2008

好吧,我刚刚完成了几个相关问题的检查,其中一个似乎有了答案,但是链接已经破了,另一个没有得到很好的陈述。

当一个孩子移到父母的边界之外时,我只是想删除mdi父级上的滚动条。

http://img224.imageshack.us/img224/4788/mdiscrollbars.jpg

我想要完成的是重现可以出现在mmo中的菜单,您可以在屏幕上移动和移出屏幕。我认为它有多种形式,但如果我错了或者我正在努力,请纠正我。

3 个答案:

答案 0 :(得分:1)

这样的事情怎么样?你得到轻微的闪烁,但我确信有一个解决方法:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        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;
        public Form1()
        {
            InitializeComponent();
        }

        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 newChild = new Form2();
            newChild.MdiParent = this;
            newChild.Show();
        }
    }
}

答案 1 :(得分:0)

我发现this使用了互操作。

该链接还显示了如何防止子表单移出mdi父级的边框。

链接中提供的代码可以解决问题,但您必须添加以下using指令:

using System.Runtime.InteropServices;

正如链接线程中所提到的,有一点闪烁,但你可能想尝试一下。

答案 2 :(得分:-1)

这是更简单的方法,没有轻弹。看看这个:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg != 3)
        {
            base.WndProc(ref m);
        }
    }