2013-04-22 97 views
1

我想創建一個窗體,其中包含面板創建的programmaticaly和控件能夠拖放和調整大小就像Microsoft Visual Studio IDE。在運行時創建,拖放和調整控件大小

我創建了這樣的東西。應該有這麼多的線條(藍色的),還有很多的盒子(黃色的),我可以移動藍色線條內的黃色框。所有功能都可以在設計時間內定義控件。這裏

public partial class Form1 : Form 
{ 
    bool allowResize = false; 
    public Form1() 
    { 
     InitializeComponent();   

     panel1.AllowDrop = true; 
     panel2.AllowDrop = true; 
     panel3.AllowDrop = true; 
     panel4.AllowDrop = true; 

     panel1.DragEnter += panel_DragEnter; 
     panel2.DragEnter += panel_DragEnter; 
     panel3.DragEnter += panel_DragEnter; 
     panel4.DragEnter += panel_DragEnter; 


     panel1.DragDrop += panel_DragDrop; 
     panel2.DragDrop += panel_DragDrop; 
     panel3.DragDrop += panel_DragDrop; 
     panel4.DragDrop += panel_DragDrop; 

     panelMove.MouseDown += panelMove_MouseDown;   

    } 

    void panelMove_MouseDown(object sender, MouseEventArgs e) 
    { 
     panelMove.DoDragDrop(panelMove, DragDropEffects.Move); 
    } 

    void panel_DragEnter(object sender, DragEventArgs e) 
    { 
     e.Effect = DragDropEffects.Move; 
    } 

    void panel_DragDrop(object sender, DragEventArgs e) 
    { 
     ((Panel)e.Data.GetData(typeof(Panel))).Parent = (Panel)sender; 
    } 

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     allowResize = true; 
    } 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     allowResize = false; 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (allowResize) 
     { 
      this.panelMove.Height = pictureBox1.Top + e.Y; 
      this.panelMove.Width = pictureBox1.Left + e.X; 
     } 
    }  
} 

enter image description here

和源代碼,但我不知道如何在運行時創建thoose控制(藍色和黃色框)。

+0

創建自己的設計師從來不是一個錯誤。 VS讓它看起來太簡單了,但這是一項非常大量的工作。至少在您自己的程序中利用現有的設計器,請查看[雜誌文章](http://msdn.microsoft.com/en-us/magazine/cc163634.aspx) – 2013-04-22 11:17:58

+2

我可以推薦WPF嗎?它'更強大和可定製。看看[這個圖設計師](http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1) – 2013-04-22 15:29:12

+0

@ HighCore我從來沒有嘗試過,但它值得去嘗試,因爲它似乎 – Rapunzo 2013-04-23 07:59:53

回答

0

您應該檢查ControlAnchor財產。錨允許控件在運行時自動重新調整大小。

使用錨定屬性定義控件的調整方式 調整其父控件的大小。將控件固定到其父控件 可以確保當父控件調整大小時,錨定的邊相對於父控件的邊緣保持在相同的 位置。

您可以將控件錨定到其容器的一個或多個邊緣。對於 示例,如果您有一個帶有其屬性值爲 的按鈕的表單被設置爲Top and Bottom,則該按鈕將被拉伸以保持 與表格的頂部和底部邊緣的錨定距離爲 表單的高度增加。

MSDN:Control.Anchor