我正在尝试创建一个包含已创建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;
}
}
}
但我不知道如何在运行时创建thoose控件(蓝色和黄色框)。
答案 0 :(得分:0)
您应该检查Control
的{{3}}属性。 Anchor允许控件在运行时自动重新调整大小。
使用Anchor属性定义控件的自动方式 调整其父控件的大小。将控件锚定到其中 父控件确保锚定边缘保持不变 父节点相对于父控件边缘的位置 控制调整大小。
您可以将控件锚定到其容器的一个或多个边缘。对于 例如,如果您的Form具有Button的Anchor属性值 设置为Top和Bottom,Button被拉伸以保持 锚定到Form的顶部和底部边缘的距离 表格的高度增加了。
MSDN:Anchor