2010-12-28 7 views
0

다음과 같은 문제가 있습니다. TabPage 개체 및 텍스트 상자 컨트롤을 동적으로 만드는 기능이 있습니다.동적으로 텍스트 상자를 생성하기위한 텍스트 변경 이벤트

private void Create() 
    { 
     TabPage zakladkaTabControl = createTabPage(); 
     TextBox TB = new TextBox(); 

     TB.TextChanged += new EventHandler(TB_TextChanged); 
    } 

이제 TextBox 컨트롤에 무언가를 쓸 때 TabPage 이름을 동적으로 변경해야합니다. 기능은 텍스트 상자와 TabPage 텍스트 상자 개체가 아니라 호출하기 때문에

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     ((TabPage)sender).Text = ((TextBox)sender).Text; 
    } 

그것은 작동하지 않습니다 나는 TextBox 컨트롤의 내용을 변경하는 지원 기능을 가지고있다. 정적으로 생성 된 객체에 대한 솔루션을 알고 있지만 동적으로 알고 있습니까? 몇 시간 동안 나는 해결책을 찾을 수 없다.

모든 도움을 주시면 감사하겠습니다. 당신이 그것을 찾을 때까지

+0

TB_TextChanged를 등록하고 textBox1_TextChanged 메소드에 대한 코드를 표시합니다. 불일치가 있습니까? 한스의 솔은 ​​효과가 있어야하지만 나는 그 질문이 정확히 무엇인지 확신 할 수 없다. –

답변

2
var box = (TextBox)sender; 
var page = (TabPage)sender.Parent; 
page.Text = box.Text; 
+0

이것은 작동 할 것입니다 .. – Dienekes

1

부모 TabPage를 얻으려면, 당신은 컨트롤 계층 구조를 걸어 수 있습니다 또는

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    var tb = (TextBox)sender; 
    Control ctl = tb.Parent; 
    while (ctl != null && !(ctl is TabPage)) 
    { 
     ctl = ctl.Parent; 
    } 

    if (parent != null) 
    { 
     var tp = (TabPage)parent; 
     // Change the TabPage name here 
    } 
} 

을, 당신은 오히려 그 때문에 지역 변수보다 zakladkaTabControl에게 클래스의 속성을 만들 수 textBox1_TextChanged 메소드에서이를 참조 할 수 있습니다.

관련 문제