2011-01-12 5 views
4

사용자가 성적을 입력하고 프로그램에서 가중 평균을 출력하는 응용 프로그램을 만듭니다. 로드 할 때 할당을위한 카테고리 수를 묻습니다. 프로그램은 동적으로 사용자가 정보를 입력 할 수있는 텍스트 상자를 만듭니다. 문제는 텍스트 상자를 만든 후 입력 된 텍스트를 읽는 방법을 파악할 수 없다는 것입니다. 내 코드는 다음과 같습니다.C#에서 동적으로 생성 된 컨트롤 사용

  TextBox txtbx = new TextBox(); 
      txtbx.Text = ""; 
      txtbx.Name = "txtbx1"; 
      txtbx.Location = new Point(10, 10); 
      txtbx.Height = 20; 
      txtbx.Width = 50; 
      Controls.Add(txtbx); 

사용자가 제출할 때 상자에 현재 텍스트를 찾을 수 있도록 어떻게이 코드를 변경할 수 있습니까?

답변

11

동적으로 컨트롤을 생성하는 경우 각 필드에 대해 필드를 가질 수 없습니다. 그러나 명명 된 컨트롤의 Controls 컬렉션에 액세스하려는 경우 ControlCollection을 이름순으로 인덱싱 할 수 있습니다. 지정된 이름을 가진 텍스트 상자를 추가 한 후, 당신은 간단하게 수행 할 수 있습니다에 대한

TextBox txtbx = (TextBox)Controls["txtbx1"]; 
0

당신이 당신의 제출 버튼에 대한 온 클릭 리스너를 설정해야하고 당신은 당신이 그것을 만든 후 텍스트 상자에 대한 참조를 유지해야합니다이

private void OnSubmit(object sender, EventArgs args) 
{ 
    string yourText = txtbx.Text; 
} 

같은 것을 할 일은. yourText에 필요한 값이 포함됩니다. 희망이

+0

어떻게하면 텍스트 상자에 대한 참조를 만들 수 있습니까? –

+0

함수의 범위 밖에서 "OnSubmit"함수로 볼 수있는 곳으로 "txtbx"를 선언 할 수 있습니다. 또는 Uwe Keim이 언급했듯이 FindControl에 사용자가 지정한 이름 ("txtbx1")을 사용할 수 있습니다. – rchanley

4

Page 클래스의 FindControl 메서드를 사용할 수 있습니다.

txtbx.ID = "txtbx1"; 

그런 다음 당신이 그것을 선택할 수 있습니다 :

TextBox txtbx1 = (TextBox)FindControl("txtbx1"); 

하고 사용

이 방법을 사용하면 생성시 설정해야하는 TextBox의 ID, 인 매개 변수를 사용합니다.


편집 : 초기 질문에 그는 Windows Forms의로 다스 려되는 추가 보낸 사람, 위의 내 대답은 오프 주제입니다.

Windows Forms에서 로컬 변수 대신 클래스 멤버 변수 만 사용하면됩니다. 예 :

public partial class MyForm 
{ 
    ... 

    private TextBox txtbx; 

    ... 

    private void createControls() 
    { 
     txtbx = new TextBox(); 
     txtbx.Text = ""; 
     txtbx.Name = "txtbx1"; 
     txtbx.Location = new Point(10, 10); 
     txtbx.Height = 20; 
     txtbx.Width = 50; 
     Controls.Add(txtbx); 
    } 

    private void someOtherFunction() 
    { 
     // Do something other with the created text box. 
     txtbx.Text = "abc"; 
    } 
} 
+0

페이지 클래스를 찾을 수 없습니다. asp.net에서만 작동합니까? Windows 응용 프로그램을 만들고 있습니다. –

+0

죄송합니다. 나는 그것을 감독합니다. ASP.NET에 대한 답변, 그에 따라 조정 해 드리겠습니다 ... –

1

양식의 모든 텍스트 상자에 대한 참조 목록을 유지하십시오. 동적으로 만들 때 목록에 textBox 참조를 추가하십시오.

그러면 텍스트를 읽고 싶을 때 목록의 모든 텍스트 상자를 반복 할 수 있습니다.

텍스트 상자의 이름을 관련 범주 이름으로 지정했는지 확인하십시오. 그런 다음 목록에서 해당 이름으로 컨트롤을 찾을 수도 있습니다.

class MyForm : Form 
{ 
    IList<TextBox> _textBoxes = new List<TextBox>(); 

    private void AddTextBox(string categoryName){ 

     var myTextBox = new TextBox(); 
     myTextBox .Name = categoryName + "txtbx"; 

     // set other properties and add to Form.Controls collection 

     _textBoxes.Add(myTextBox); 
    } 

    private TextBox FindTextBox(string categoryName) 
    { 
     return _textBoxes.Where(t => t.Name.StartsWith(categoryName)).FirstOrDefault(); 
    } 
} 
1

이 코드는 동적으로 버튼에 텍스트 상자를 추가이 코드는 당신을 도울 것입니다 희망

int count = 1; 
public System.Windows.Forms.TextBox AddNewTextBox() 
    { 
     System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox(); 
     this.Controls.Add(txt); 
     txt.Top = count * 25; 
     txt.Left = 100; 
     txt.Text = "TextBox " + this.count.ToString(); 
     count = count + 1; 
     return txt; 
    } 
private void Onbutton_Click(object sender, EventArgs e) 
    { 
     //Call the method AddNewTextBox that uses for Dynamically create Textbox 
     AddNewTextBox(); 
    } 

을 클릭합니다. 감사합니다. 해피 코딩 :)

관련 문제