C #: Как я могу удалить полосы прокрутки от родителя mdi? - PullRequest
0 голосов
/ 13 мая 2009

Что ж, я только что закончил проверять несколько смежных вопросов, и один из них, похоже, получил ответ, но ссылка не работает, а другая не очень хорошо сформулирована.

Я просто пытаюсь удалить полосы прокрутки на родительском элементе mdi, когда дочерний элемент перемещается за пределы родительского элемента.

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

То, что я пытаюсь сделать, - это воспроизвести меню, которые могут появиться в мммо, чтобы вы могли перемещаться по экрану и выходить из него. Я предполагал, что это было с несколькими формами, но если я ошибаюсь или я делаю это трудным путем, пожалуйста, поправьте меня.

Ответы [ 3 ]

1 голос
/ 13 мая 2009

Как насчет этого? Вы получаете небольшое мерцание, но я уверен, что есть обходной путь для этого:

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();
        }
    }
}
0 голосов
/ 16 июля 2009

Это более простой способ сделать это и не щелкая. Посмотрите на это:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg != 3)
        {
            base.WndProc(ref m);
        }
    }
0 голосов
/ 13 мая 2009

Я нашел это , которое использует взаимодействие.

Ссылка также показывает, как предотвратить перемещение дочерней формы за пределы родительского элемента mdi.

Код, указанный в ссылке, помогает, но вам нужно добавить следующее, используя директиву:

using System.Runtime.InteropServices;

Как уже упоминалось в связанной ветке, есть немного мерцания, но вы можете попробовать его.

...