2010-03-28 3 views
3

나는 또 다른 형태의 텍스트 상자 안의 텍스트에 직접 액세스하고 싶은, 그래서 나는 폼에 공용 변수 _txt 추가 등과 같은 이벤트 추가 :텍스트 상자를 변수에 연결 하시겠습니까?

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    _txt = richTextBox1.Text; 
} 

을하지만 형태는 다음과 같이로드 :

public FrmTextChild(string text) 
{ 
    InitializeComponent(); 
    _txt = text; 
    richTextBox1.Text = _txt; 
    Text = "Untitled.txt"; 
} 

2 개를 직접 연결하는 더 좋은 방법이 있습니까?

답변

6

TextBox에서 직접 읽는 대신 속성을 사용할 수 있습니다. 그렇게하면 추가 변수가 전혀 필요 없습니다.

public string Text 
{ 
    get 
    { 
    return richTextBox1.Text; 
    } 
} 

텍스트를 변경하려면 설정자를 추가하십시오.

2

나는 폼이 서로의 컨트롤을 참조하도록해서는 안된다고 생각한다. 레이아웃을 바꾸면 다른 것에 대한 코드를 다시 작성해야한다. 별도의 클래스에 공유 값을 저장하고 두 형식 참조 이 모두 인 것이 훨씬 좋습니다. 그래서 같이 :

public class DataContainer 
{ 
    public string SomeData{get;set;} 
} 

public class Form1:Form 
{ 
    private DataContainer _container; 
    public Form1(DataContainer container) 
    { 
     _container=container; 
    } 

    private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     _container.SomeData = richTextBox1.Text; 
    } 

    private void SpawnForm2() 
    { 
     var form2=new Form2(_container); 
     form2.Show(); 
} 

public class Form2:Form 
{ 
    private DataContainer _container; 
    public Form2(DataContainer container) 
    { 
    _container=container; 
    } 
} 
0

텍스트 상자수정 속성을 설정하는 것입니다 할 수있는 또 다른 방법 (또는 액세스하려는 다른 제어) 내부 보호 한 다음 두 번째 양식을 열려면 소유자이 첫 번째 양식입니다.

이 방법을 수행 할 수 있습니다 나중에 액세스에 대한 제어와 같은 뭔가 속성 :

((Form1)this.Owner).textBox1.Text = "This is a message from the second form"; 
관련 문제