2010-09-27 43 views
2

我有下面的代碼編程方式創建一個RichTextBox:引用以編程方式創建的命名元素?

RichTextBox RT = new RichTextBox(); 
RT.Name = "asdf"; 
RT.Text = "blah"; 

TableLayoutPanel.Controls.Add(RT,0,0); 

現在讓我們假設我想修改RT的文字,它的名稱是「ASDF」,Visual Studio將不會讓我寫ASDF .Text =「哈哈」,因爲asdf尚不存在。

我怎樣才能抓住「asdf」,並設置其文本?由於此RichTextBox位於特定單元格中,我可以根據其單元格座標來抓取它嗎?

回答

1

那麼......你確實實例化RichTextBox並有一個可以使用的引用;在你的例子中它被稱爲「RT」。

現在,您可能已經在某個方法中完成了此操作,因此它在本地範圍內,並且在您需要時不再可用。因此,您可以通過將其分配給您可以訪問的某個成員來以某種方式保存該參考。例如,如果你有很多這樣的設備,並想以某種方式通過名稱進行區分,則可以將其粘貼到Dictionary<string, RichTextBox>。或者你可以把它放在一些靜態變量中;有很多選擇,每個都有自己的優點和缺點。

你可能想要做的一件事想要做的就是走控制樹尋找與你指定的名稱控制。但是如果你真的想要的話,你也可以這樣做。

+0

Randolpho,這非常有幫助,我會盡力實施你在這裏描述的內容。謝謝! – sooprise 2010-09-27 15:23:39

+0

@Randopho〜我認爲尋找Controls.Find('name',false)是該特定函數存在的原因。你爲什麼不用它來達到這個目的?如果您動態地構建數以千計的控件,可能需要一些時間才能找到它,但我不認爲大多數表單將包含超過幾百個元素,所以走樹(是的,我看到反射器確實顯示了「因爲(i; i jcolebrand 2010-09-27 16:13:23

+0

@drachenstern:讓我以另一種方式給你:如果你正在建立一個有大量記錄的數據庫表,並且知道你要在一個你知道會獨特的領域進行搜索,你會不會在該領域放置一個索引,以便您可以更快地搜索?考慮我的'Dictionary '是這樣一個索引。 – Randolpho 2010-09-27 16:25:36

2

您應該能夠通過TableLayoutPanel.Controls屬性獲取對其的引用,該屬性返回TableLayoutControlCollection。該類提供了兩種方法來按名稱查找控件:Item propertyFind methodItem屬性返回一個具有指定名稱的控件,而Find方法返回一組控件。在這兩種情況下,你都需要從Control投射到RichTextBox

var rt = (RichTextBox)myTableLayoutPanel.Controls.Item["asdf"]; 

// or 

var rts = myTableLayoutPanel.Controls.Find("asdf", false); 
foreach (var rt in rts) 
    // (RichTextBox)rt ... 

編輯:一定要檢查未發現控制的情況下,使用它之前的結果不爲空。

相關問題