2013-04-22 5 views
1

프로그래밍 방식으로 만든 패널이 포함 된 양식을 만들고 Microsoft Visual Studio IDE처럼 끌어서 크기를 조절할 수있는 컨트롤을 만들려고합니다.런타임에 끌어서 놓기 컨트롤을 만들거나 크기를 조절하십시오.

그리고 이렇게 만들었습니다. 너무 많은 선들 (파란 색)과 너무 많은 상자들 (노란 색)이 있어야하고 푸른 색 선들 안의 노란 상자들을 움직일 수 있습니다. 모든 것은 디자인 타임에 정의 된 컨트롤과 함께 작동합니다.

enter image description here

소스 코드 여기

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

자신의 디자이너를 작성하는 것은 실수 결코 없다. VS를 사용하면 너무 쉽게 보이지만 작업량은 매우 큽니다. 적어도 자신의 프로그램에서 기존 디자이너를 활용하려면이 [잡지 기사] (http://msdn.microsoft.com/en-us/magazine/cc163634.aspx) –

+2

을 대신 WPF를 제안 해 주시겠습니까? 그것은 훨씬 더 강력하고 사용자 정의가 가능합니다. [This Diagram Designer] (http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1)에서 살펴보십시오. –

+0

@ HighCore 필자는 한번도 시도한 적이 없지만 그렇게해볼 가치가있다. – Rapunzo

답변

0

Anchor 속성이 Control인지 확인해야합니다. 앵커를 사용하면 런타임에 컨트롤의 크기를 자동으로 조정할 수 있습니다.

Anchor 속성을 사용하면 부모 컨트롤의 크기가 조정될 때 컨트롤의 크기가 자동으로 조정되는 방법을 정의 할 수 있습니다. 컨트롤을 부모 컨트롤로 고정하면 부모 컨트롤의 크기를 조정할 때 앵커 된 가장자리가 부모 컨트롤의 가장자리를 기준으로 동일한 위치에 남아있게됩니다.

컨테이너를 하나 이상의 가장자리에 고정 할 수 있습니다. 의 경우 Anchor 속성 값이 이 위쪽과 아래쪽으로 설정된 단추가있는 양식이있는 경우 Button은 양식의 위쪽 및 아래쪽 가장자리에 고정 거리를 유지하도록 펼쳐져 양식의 높이 증가합니다.

MSDN은 : Control.Anchor