2017-08-25 48 views
0

我製作了Windows窗體解決方案。在主外殼中,添加了一個MenuStrip,並且可以在其上添加更多視圖。WinForms - 禁用拖動菜單欄和其他窗口

問題是,當我添加/打開一個新的視圖時,它在MenuStrip後面打開。 enter image description here 不知何故,我想讓MenuStrip有一個邊框,所以不可能拖拽背後的東西,但我不知道如何。

同樣的情況應該與其他視圖。

回答

0

您應該爲要添加的控件設置Dock屬性。

+0

我試圖'menuStrip.Dock = DockStyle.Top;',但沒有幫助。拖動時,甚至可以將鼠標指針拖到MenuStrip上。 – Moelbeck

+0

設置您要添加的控件的Dock屬性,而不是MenuStrip的Dock –

+0

也嘗試過。不知道我做錯了什麼,因爲我認爲這是一件容易的事情 - 但我是Winforms的新手。 我和其他觀點一樣,我不希望一個人被拖到另一個前面。 – Moelbeck

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; 
    } 
} 

當你把一個孩子帶到它將被背出拍下了菜單下的邊緣地區 - 即移動它會導致事件再次觸發,但第二次沒有什麼應該發生的方法(所以沒有遞歸)。

我不喜歡這個解決方案,因爲我無法得知我是否有一個條件,使它遞歸,並且我不喜歡不確定性。

祝你好運。

相關問題