C# 在运行时创建、拖放和调整控件大小

C# 在运行时创建、拖放和调整控件大小,c#,winforms,visual-studio-2010,drag-and-drop,resize,C#,Winforms,Visual Studio 2010,Drag And Drop,Resize,我正在尝试创建一个表单,其中包含程序创建的面板和能够拖放和调整大小的控件,就像Microsoft Visual Studio IDE一样 我创造了这样的东西。应该有这么多的线(蓝色的一条)和这么多的框(黄色的一条),我可以移动蓝色线内的黄色框。一切都与设计时定义的控件一起工作 还有这里的源代码 public partial class Form1 : Form { bool allowResize = false; public Form1() {

我正在尝试创建一个表单,其中包含程序创建的面板和能够拖放和调整大小的控件,就像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;
        }
    }       
}
但我不知道如何在运行时创建这些控件(蓝色和黄色框)

您应该检查
控件的属性。锚点允许控件在运行时自动重新调整大小

使用“定位”属性定义控件的自动定位方式 调整其父控件的大小时调整大小。将控件锚定到其 父控件可确保定位的边保持在相同的位置 当父控件处于活动状态时,相对于父控件的边的位置 控件的大小已调整

可以将控件锚定到其容器的一个或多个边缘。对于 例如,如果您有一个带有按钮的窗体,该按钮的锚属性值为 设置为顶部和底部时,按钮会拉伸以保持 到模板顶部和底部边缘的锚定距离 形状的高度增加了


MSDN:

创建自己的设计器从来都不是一个错误。VS让它看起来太简单了,但这是一个非常大量的工作。至少在您自己的程序中利用现有的设计器,检查此选项,我可以建议使用WPF吗?它的功能更强大,可定制性更强。看看@HighCore,我从未尝试过,但它似乎值得一试