2010-02-19 5 views

답변

44

아주 간단히 말하면 :

사용자 컨트롤 사용자 지정, 재사용 가능한 구성 요소를 만드는 방법입니다. 사용자 정의 컨트롤은 다른 컨트롤을 포함 할 수 있지만 폼에 의해 호스팅되어야합니다.

Windows 양식은 사용자 정의 컨트롤을 포함하여 컨트롤의 컨테이너입니다. 사용자 정의 컨트롤과 유사한 많은 특성을 포함하고 있지만, 주된 목적은 컨트롤을 호스트하는 것입니다.

+0

사용자가 다른 사용자 컨트롤을 호스트 (포함) 할 수 있습니까? –

+0

@RobertNiestroj 가능합니다. – LxL

4

윈도우 폼은 사용자 컨트롤을위한 컨테이너입니다.

+3

그래서 사용자 컨트롤입니다! –

+0

어떻게 양식을 사용자 정의 컨트롤에 넣을 수 있습니까? – Fredou

+1

수는 없지만 사용자 정의 컨트롤에 사용자 정의 컨트롤을 넣을 수는 있습니다. –

17

그들은 공통적으로 로트을 가지고 있으며, 둘 다 ContainerControl에서 파생됩니다. 그러나 UserControl은 자식 창으로 디자인되었으므로 컨테이너에 배치해야합니다. 양식은 상위가없는 최상위 창으로 설계되었습니다.

당신은 실제로 false로 TopLevel이 속성을 설정하여 자식 창에 양식을 설정할 수 있습니다

: UserControl을 나던이없이 터지는 같은 기능이있는 동안

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     var child = new Form2(); 
     child.TopLevel = false; 
     child.Location = new Point(10, 5); 
     child.Size = new Size(100, 100); 
     child.BackColor = Color.Yellow; 
     child.FormBorderStyle = FormBorderStyle.None; 
     child.Visible = true; 
     this.Controls.Add(child); 
    } 
} 
+3

하지만 IMO는 그렇게하지 않는 것이 좋습니다. :) –

+0

불필요하게 사용하는 메모리가 아주 적습니다. 아주 작은 땅콩이 Control 클래스와 특히 고유 창 비용과 비교됩니다. Microsoft가 TopLevel 속성을 공개하지 않는 것은 매우 쉽습니다. 이 기능은 단지 모호하며 사용하는 것이 좋습니다. –

+0

코드 선명도 및 구성의 관점에서 말하고있는 것 같습니다. 확실히, 당신은 이것을 할 수 있고, 확실히 지원되지만, 제 생각은이 좋은 예를 디자인 패턴으로 생각하지 않는 것입니다. :) –

0

가장 큰 차이는 form.show이고 다른 창을 제공합니다 부모의. 나머지는 Scrollablecontrol에서 파생 된 beind와 같은 두 컨트롤에서 동일합니다.