2010-01-15 4 views
4

안녕하세요 이런 일반적인 방법, 뭔가 내 양식에 컨트롤을 추가 할 :(알 수없는 형식) 컨트롤을 폼에 동적으로 추가하려면 어떻게합니까?

void addcontrol(Type quien) 
{ 
    this.Controls.Add(new quien);    
} 

private void btnNewControl_Click(object sender, EventArgs e) 
{ 
    addcontrol(typeof(Button)); 
} 

이 가능합니까?

+0

기본 속성 값만 가진 컨트롤을 추가하면 결코 유용하지 않습니다. 조만간, 당신은 실제로 어떤 종류의 통제인지를 돌 봅니다. –

+0

@nobugz : 그 때 재산 격자가 행동을 입력합니다! – Luiscencio

+0

나만의 디자이너를 만들고 있니? Grokking TypeConverter 및 PropertyDescriptor 아직? 그것은 야생의 타는 것입니다. –

답변

7

당신은 Activator.CreateInstance를 사용하여 형식 인스턴스에서 새 인스턴스를 만들 수 있습니다

void AddControl(Type controlType) 
{ 
    Control c = (Control)Activator.CreateInstance(controlType); 
    this.Controls.Add(c); 
} 

일반 버전을 만들기 위해 더 나은 것 :

void AddControl<T>() where T : Control, new() 
{ 
    this.Controls.Add(new T()); 
} 
+0

이것은 정말 멋지다, 나는 울거야! thxs – Luiscencio

+0

+1 일반용. 이것은 OP가 Control베이스가 제공하는 것 이외의 다른 기능에 신경 쓰지 않는 한 정상적으로 작동합니다. –

1

이 확실히 작동합니다

void addcontrol(Control ctl) 
{ 
    this.Controls.Add(ctl);    
} 

private void btnNewControl_Click(object sender, EventArgs e) 
{ 
    addcontrol(new Button()); 
} 
+0

이것은 좋지만 그 유형의 컨트 롤이 이미 존재하는지 확인하고 싶다면 BEEFORE가 새로운 것을 작성하고 있는지 확인하고 싶습니까? – Luiscencio

+0

양식에 같은 유형의 컨트롤이 여러 개있을 수 있습니다. –

+0

그래,하지만, 많은, 많은, 멋진 것들에 사용할 수있는 메모리를 사용합니다. – Luiscencio

관련 문제