프로그래밍 방식으로 만든 패널이 포함 된 양식을 만들고 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 컨트롤 (파란색과 노란색 상자)를 만드는 방법을 잘 모릅니다.
자신의 디자이너를 작성하는 것은 실수 결코 없다. VS를 사용하면 너무 쉽게 보이지만 작업량은 매우 큽니다. 적어도 자신의 프로그램에서 기존 디자이너를 활용하려면이 [잡지 기사] (http://msdn.microsoft.com/en-us/magazine/cc163634.aspx) –
을 대신 WPF를 제안 해 주시겠습니까? 그것은 훨씬 더 강력하고 사용자 정의가 가능합니다. [This Diagram Designer] (http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1)에서 살펴보십시오. –
@ HighCore 필자는 한번도 시도한 적이 없지만 그렇게해볼 가치가있다. – Rapunzo