2010-03-28 63 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"; 
} 

有沒有更好的方法來直接鏈接兩者?

回答

6

您可以使用屬性來直接從您的文本框中讀取。這樣你根本不需要額外的變量。

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

如果您還希望能夠更改文本,請添加setter。

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";