2009-09-28 3 views
-1

내가 원하는 것은 실제로 이것보다 더 복잡합니다. 하지만 교장은 .. ..winform C# : C에서 이벤트 후 다른 폼 컨트롤 삽입 #

텍스트 상자와 같은 다른 컨트롤을 기존 양식에 삽입하고 싶지만 버튼을 클릭하는 것과 같은 일정한 이벤트가 발생하면이를 적용하려고합니다.

새 텍스트 상자

은 동일한 양식 (기본 양식) 내가 가진 것을

가 삽입된다. 나는 보통 창문 양식 응용 프로그램을 만든 다음 거기에 버튼을 놓습니다. 다음 동일한 프로젝트에서 새 양식 창을 추가하십시오. 거기에 텍스트 상자를 넣으십시오.

및 버튼 클릭의 경우

, 나는 그것이 작동하지만이 대화 상자로 표시

form2.showdialog(); 

을 넣어.

하지만 내가 원하는 것은 텍스트 상자가 대화 상자와 같은 새 양식이 아닌 기본 양식에 표시된다는 것입니다.

감사합니다.

답변

0

hei. 목록 (일반 목록)

을 주 양식으로 사용하여 해결할 수 있으며 개인 변수 목록 을 만들고 변수를 가져 오기 위해 공용 메서드를 만듭니다.

기본 폼의 경우 목록을 반복하여 추가 할 공용 메서드를 만듭니다.

그래서 새로운 클래스에서 내가 만든 방법 중 하나에서 양식 만들기를 넣습니다. 여기에 listcontrol을 전달합니다.

그런 다음 모든 컨트롤 변수를 목록 컨트롤에 넣습니다.

버튼을 클릭하면 클래스 메서드가 호출되고 클래스에 의해 만들어진 폼 컨트롤이 자동으로 그려집니다.

private List<Control> listControl; 

     public windowForm() 
     { 
      InitializeComponent(); 
      listControl = new List<Control>(); 
     } 

     public List<Control> ListControl { 
      get { return listControl; } 
     } 

     public void addControl() { 
      if (this.listControl.Count() > 0) { 
       foreach (Control c in listControl) 
       { 
        Console.WriteLine("adding "+c.Name); 
        this.panel1.Controls.Add(c); 
       } 
      } 
     } 

     public void removeControl() { 
      if (this.listControl.Count() > 0) 
      { 
       foreach (Control c in listControl) 
       { 
        Console.WriteLine("removing " + c.Name); 
        this.panel1.Controls.Remove(c); 
       } 
      } 
     } 

와 내가 만든 새 클래스

, 내가

this.groupbox_VectorAddition = new System.Windows.Forms.GroupBox(); 
      this.txtBox_v1a = new System.Windows.Forms.TextBox(); 
      this.txtBox_v1b = new System.Windows.Forms.TextBox(); 
      this.txtBox_v1c = new System.Windows.Forms.TextBox(); 
      this.txtBox_v2c = new System.Windows.Forms.TextBox(); 
      this.txtBox_v2b = new System.Windows.Forms.TextBox(); 
      this.txtBox_v2a = new System.Windows.Forms.TextBox(); 
      this.lbl_Vector1 = new System.Windows.Forms.Label(); 
      this.lbl_Vector2 = new System.Windows.Forms.Label(); 
      this.btn_countAddVector = new System.Windows.Forms.Button(); 
      this.btn_resetVector = new System.Windows.Forms.Button(); 
//put everything into the panel 
      form.ListControl.Add(btn_resetVector); 
      form.ListControl.Add(btn_countAddVector); 
      form.ListControl.Add(lbl_Vector2); 
      form.ListControl.Add(lbl_Vector1); 
      form.ListControl.Add(txtBox_v2a); 
      form.ListControl.Add(txtBox_v2b); 
      form.ListControl.Add(txtBox_v2c); 
      form.ListControl.Add(txtBox_v1c); 
      form.ListControl.Add(txtBox_v1b); 
      form.ListControl.Add(txtBox_v1a); 

      form.ListControl.Add(groupbox_VectorAddition); 
1
private void button1_Click(object sender, EventArgs e) 
{ 
    TextBoxt text = new TextBox(); 
    // set location and other properties 
    this.Controls.Add(text); 
} 
3

당신은 디자이너에 추가하고 이벤트에 TextBox.Visible 속성을 전환 때때로하지, 난 그냥 제안, 단 하나의 텍스트 상자 가끔 볼 필요합니다.

여러 컨트롤을 동적으로 추가해야하는 경우 TableLayoutPanel을 사용하고 런타임에 컨트롤을 추가하는 것이 좋습니다.

마지막으로 다음과 같이 기본 폼에 컨트롤을 추가 할 수 있습니다.

Control textBox = new TextBox(); 

// Set the location, size, and all the other properties. 

this.Controls.Add(textBox); 

이렇게하면 양식을 작성할 때 가장 큰 자유를 누릴 수 있지만 매우 간단한 경우에는 합리적인 레이아웃을 얻는 것이 중요하지 않습니다.

+0

havent 한 내가 별도의 파일과 클래스에 그것을하려고이 – r4ccoon

+0

을 적용하는 데 성공했습니다. 나는 그것에 기본 폼 변수를 전달해야한다고 생각해. – r4ccoon

+0

클래스 FormUI_VectorAddition이 있고 메서드 InitializeComponent (컨트롤 컨트롤, windowForm 폼) 컨트롤은 실제로 패널입니다. control.SuspendLayout(); form.SuspendLayout(); control.Controls.Add (this.txtBox_v1a); this.txtBox_v1a = new System.Windows.Forms.TextBox(); control.ResumeLayout (false); control.PerformLayout(); form.ResumeLayout (false); – r4ccoon