WinForms - 禁止拖动MenuStrip&其他窗户

时间:2017-08-25 08:49:17

标签: c# winforms

我已经制作了Windows窗体解决方案。在主shell中,添加了一个MenuStrip,可以在其上添加更多视图。

问题是,当我添加/打开一个新视图时,它会在MenuStrip后面打开。 enter image description here 不知何故,我希望MenuStrip有一个边框,所以不可能拖动它背后的东西,但我不知道如何。

同样的情况应与其他观点一起使用。

2 个答案:

答案 0 :(得分:0)

您应该为要添加的控件设置Dock属性。

答案 1 :(得分:0)

好的,我有一个解决方案 - 我不完全喜欢它,但它有效!在标志等方面你需要通常的MDI嫌疑人。

MDI容器的主要形式需要具有以下内容:

public partial class MainForm  : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    int BodyCount = 0;

    private void fileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        MDIChildForm child = new MDIChildForm();
        child.TitleText = String.Format("Child window {0}", ++BodyCount);
        child.MdiParent = this;
        child.Show();
    }
    /*
    ** This could be fun - shouldn't recurse!
    */
    public void ShifTheChild(MDIChildForm spoiltBrat)
    {
        var m = menuStrip1.Height;
        if (spoiltBrat.Location.Y < m)
            spoiltBrat.Location = new Point(spoiltBrat.Location.X, 0);
        return;
    }
}

子表单需要更改位置事件:

public partial class MDIChildForm : Form
{
    public String TitleText 
    {
        get { return this.Text; }
        set { this.Text = value; }
    }

    MainForm parent = null;

    public MDIChildForm()
    {
        InitializeComponent();
        this.ShowIcon = false;
    }


    private void MDIChildForm_LocationChanged(object sender, EventArgs e)
    {
        if (parent != null)
            parent.ShifTheChild(this);
    }

    private void MDIChildForm_Load(object sender, EventArgs e)
    {
        parent = this.MdiParent as MainForm;
    }
}

当你将一个孩子移动到菜单下面的黄昏区域时,它会被快照退出 - 移动它的方法将导致事件再次触发,但第二次不会发生任何事情(因此没有递归)。

我不喜欢这个解决方案只是因为我无法理解是否存在使其递归的情况,而且我不喜欢不确定性。

祝你好运。